Tipy a triky v Delphi, díl 95.

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í.

Váš názor Další článek: Ogg Theora alpha 2 - konkurence pro MPEG-4

Témata článku: Software, Programování, Díl, Hlavní myšlenka, Focus, Trik, První parametr


Určitě si přečtěte

Šmírovačka kamerami Googlu: Koukněte se, co nového zachytily na Street View

Šmírovačka kamerami Googlu: Koukněte se, co nového zachytily na Street View

Google stále fotí celý svět do své služby Street View. A novodobou zábavou je hledat v mapách Googlu vtipné záběry. Podívejte se na výběr nejlepších!

redakce | 44

Budoucnost elektroniky: čeští vědci stojí za revolučním čipem, který nemá ve světě obdoby

Budoucnost elektroniky: čeští vědci stojí za revolučním čipem, který nemá ve světě obdoby

** Čeští vědci pod vedením Tomáše Jungwirtha vyvíjí nový typ revolučního paměťového čipu ** Zatímco v současnosti elektronika pracuje s elektrony, v budoucnu to budou spiny elektronů ** Čipy budou moci být klidně i 1 000x rychlejší a úspornější

Karel Javůrek | 32

Alan Turing: Genius, který matematicky stvořil počítač

Alan Turing: Genius, který matematicky stvořil počítač

Řešením matematického problému se dostal k modelu teoretického stroje, který nese jeho jméno a je základem logiky univerzálních počítačů.

Pavel Tronner | 57

Porno insider: Jak virtuální realita vstupuje do filmů pro dospělé

Porno insider: Jak virtuální realita vstupuje do filmů pro dospělé

** Pornografie údajně představuje třetinu internetové obsahu a je technologický tahounem ** Do erotického obsahu postupně zasahuje i virtuální realita ** Kromě vizuálního vjemu se pracuje také na virtuálním uspokojení toho hmatového

Jan Dudek | 28


Aktuální číslo časopisu Computer

Velký test 18 bezdrátových sluchátek

Vše o přechodu na DVB-T2

Procesory AMD opět porážejí Intel

7 NVMe M.2 SSD v přímém souboji