I dnešní díl bude zaměřen spíše na začátečníky. Ukážeme si, jak v komponentě RichEdit vyhledat a označit nalezený text a pak si předvedeme, jak dynamicky změnit hlavní formulář aplikace na základě spouštěcích parametrů aplikace.
Začneme tedy hledáním a označováním textu v komponentě
RichEdit. Podobně jako každá rozumná "textová" komponenta nám i
RichEdit nabízí řadu metod pro práci s textem a nechybí mezi nimi pochopitelně ani hledání textu. Konkrétně se jedná o metodu
FindText, které musíme jednak říci, jaký text hledáme, kde (tedy odkud kam) a parametry hledání (rozlišování velikosti písmen, pouze celá slova...). Na výstupu dostaneme pozici prvního znaku nalezeného řetězce a nebo
-1 v případě neúspěchu.
Tolik tedy hlavní myšlenka, která je ostatně popsána v nápovědě. My si poté získanou hodnotu vezmeme jako základ pro druhou část úkolu - pro označení textu. Nejprve nastavíme komponentě Focus, aby se nám výřez okna vždy přesunul na nalezenou část textu. Dále zvolíme počáteční bod označení textu, kterým je právě ona pozice nalezená v první části úkolu a konečně zvolíme délku označení. Ta je samozřejmě shodná s délkou hledaného textu, kterou rovněž známe.
function SearchAndSelect(RichEdit: TRichEdit; SearchText: string): Boolean;
var
Position: Integer;
begin
Result := False;
with RichEdit do
begin
Lines.BeginUpdate;
Position := FindText(SearchText, 0, Length(RichEdit.Text), [stMatchCase]);
if Position <> -1 then
begin
SetFocus;
SelStart := Position;
SelLength := Length(SearchText);
Result := true;
end;
Lines.EndUpdate;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if not SearchAndSelect(RichEdit1, `hledaný text`) then ShowMessage(`Nenalezeno`);
end;
Takto napsaná funkce nám najde první výskyt hledaného výrazu a označí jej. Budete-li chtít nalézt i ostatní výrazy, stačí dát celou „věc“ do cyklu a posouvat hranice prohledávaného textu. Označit více nesouvislého textu bohužel nelze.
A dostáváme se k druhému dnešnímu tématu. Ukážeme si, jak na základě parametrů při spouštění naší aplikace zvolit, který formulář bude otevřen jako první (hlavní). Toho se dá využít mnoha způsoby, například můžete podle vstupních parametrů měnit uživatelské rozhraní a podobně. Této změny docílíme velmi snadno drobnou úpravou projektového souboru, který bude vypadat takto:
program Project1;
uses
Forms, Classes, SysUtils,
Unit1 in `Unit1.pas` {Form1}
Unit2 in `Unit2.pas` {Form2}
{$R *.res}
var
InstanceClass: TComponentClass;
FormReference: TForm;
begin
Application.Initialize;
if FindCmdLineSwitch(`druhy`, [`-`, `/`], True) then
begin
InstanceClass := TForm2;
FormReference := Form2;
end
else
begin
InstanceClass := TForm1;
FormReference := Form1;
end;
Application.CreateForm(InstanceClass, FormReference);
Application.Run;
end.
Jak vidíte, do "klasické" struktury je vloženo jednoduché větvení na základě vstupního parametru při spouštění. Vložíte-li tedy za název aplikace a lomítko (pomlčku) parametr "druhy", bude hlavním formulářem druhý formulář místo prvního. Tímto způsobem samozřejmě můžete volit mezi mnoha různými formuláři na základě celé řady vstupních parametrů či jejich kombinací.