Tipy a triky v Delphi, díl 163. – hledání v TreeView

Po minulých grafických orgiích zde máme dva jednoduché začátečnické tipy. Ukážeme si, jak vyhledávat položky v TreeView a jak detekovat stisk pomocných kláves při výběru položky v menu.

Začneme od konce a povíme si o detekci stisku kláves při výběru položky v menu. Za normálních okolností si uživatel vybere v menu položku a my máme za úkol pouze napsat pro tuto položku obsluhu události. Tento základ si rozšíříme o možnost stisku klávesy CTRL, ALT nebo SHIFT během výběru položky z menu. Uživatel pak má možnost aktivovat buď jednoduchým kliknutím standardní funkci pro danou položku a nebo při současném podržení příslušné klávesy může spustit funkci odlišnou od té základní. Jaké konkrétní funkce to budou, resp. jak se bude lišit ta hlavní od té "skryté", to už samozřejmě záleží na okolnostech a vašem vlastním uvážením.

A jak tedy na to? Je to velmi snadné. Prostě a jednoduše v obsluze události příslušné položky vložíme jednoduchou podmínku a s využitím funkce GetKeyState testujeme stisk příslušné klávesy. Obsluha události položky menu pak může vypadat nějak takto:

procedure TForm1.MenuItem1Click(Sender: TObject);
begin
  if HiWord(GetKeyState(VK_SHIFT)) <> 0 then ShowMessage(`Shift`)
  else
    if HiWord(GetKeyState(VK_CONTROL)) <> 0 then ShowMessage(`Ctrl`)
    else
      if HiWord(GetKeyState(VK_MENU)) <> 0 then ShowMessage(`Alt`);
end;

Která klávesa byla stisknuta vypíše ShowMessage a pokud nebyla stisknuta žádná, nic se nestane. V příkladu vidíte všechny tři hlavní možnosti, tedy Shift, Ctrl a Alt. S klávesou Alt je trochu problém, určitě vás napadne proč a sami si to pak můžete ověřit v přiloženém příkladu.

Druhý dnešní tip se týká komponenty TreeView. Tato velmi často používaná komponenta umožňuje velmi snadno a přehledně zobrazit stromově strukturovaná data, ale pokud je "strom" příliš rozsáhlý a komplikovaný, nemusí se uživatel hned na první pokus dobře zorientovat a vyhledání požadované větve mu pak může zabrat dost času. Proto se naučíme v TreeView vyhledávat textové položky. Vyhledávací funkce bude velmi jednoduchá a vypadat bude takto:

function TForm1.TreeViewSearch(TV: TTreeView; SItem: string): TTreeNode;
var
  i: Integer;
  iItem: string;
begin
  Result := nil;
  if (TV = nil) or (SItem = ``) then Exit;
  for i := 0 to TV.Items.Count - 1 do
  begin
    iItem := TV.Items[i].Text;
    if SItem = iItem then
      begin
        Result := TV.Items[i];
        Exit;
      end;
  end;
end;

Parametrem funkce je prohledávaný Treeview a hledaný text. Na výstupu dostaneme příslušnou větev. Funkci pak použijeme následujícím způsobem:

procedure TForm1.Button1Click(Sender: TObject);
begin
  TreeView1.Selected := TreeViewSearch(TreeView1, `test`);
  Treeview1.SetFocus;
end;

Stisknutím příslušného tlačítka se spustí vyhledávání a nalezený prvek bude označen, přičemž TreeView ještě dostane focus. Funkci si můžete pochopitelně značným způsobem rozšířit a upravit, protože v této verzi funkce vyhledávání skončí po nalezení prvního vyhovujícího prvku. To už ale nechám na vaší úvaze a potřebách.

I tentokrát si můžete ukázkový projekt stáhnout zde.

Diskuze (6) Další článek: LinuxExpo 2005 mění místo konání i obsah

Témata článku: Software, Programování, Tree, IIT, TRI, Ukázkový příklad, Shift, Díl, Jednoduché vyhledávání, Hledání, DEL, Focus, Trik, Exit, Položka


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

Vyrobíme si falešný Mac mini za tisícovku. Stačí Raspberry Pi a 3D tiskárna

Vyrobíme si falešný Mac mini za tisícovku. Stačí Raspberry Pi a 3D tiskárna

** Vyzkoušíme Raspberry Pi 4 s iRaspbianem ** Operační systém vypadá skoro jako macOS ** Vše strčíme do vlastní stylové krabice

Jakub Čížek | 29

12 netradičních map České republiky, které jste ještě nikdy neviděli

12 netradičních map České republiky, které jste ještě nikdy neviděli

** Tušíte, kolik je u nás hřbitovů a jak jsou velké? ** Dokážete si představit mapu českých řek a potoků? ** Udělali jsme to všechno za vás nad daty ČÚZK

Jakub Čížek | 8

10 map, na kterých můžete COVID-19 sledovat téměř v živém přenosu

10 map, na kterých můžete COVID-19 sledovat téměř v živém přenosu

** Koronavrus můžete sledovat skoro živě ** Analytici a kartografové připravili hromadu map ** Vybrali jsme deset z nich

Jakub Čížek | 8


Aktuální číslo časopisu Computer

Megatest 24 PC zdrojů

Jak využít umělou inteligenci

10 špičkových sluchátek s ANC

Playstation 5 vs Xbox Series X