TTreeView Delphi komponent zobrazí hierarchický zoznam položiek— uzly stromov. Uzol je prezentovaný textom uzla a voliteľným obrázkom. Každý uzol v stromovom prehľade je inštanciou triedy TTreeNode.
Aj keď môžete vyplniť stromový prehľad položkami v čase návrhu, použite Editor položiek TreeView, vo väčšine prípadov vyplníte stromové zobrazenie v čase spustenia - v závislosti od toho, o čom je vaša aplikácia.
Editor položiek TreeView odhaľuje, že k uzlu existuje iba niekoľko informácií, ktoré môžete „priložiť“: text a niekoľko indexov obrázkov (pre normálny stav, rozšírené, vybrané a podobne).
V podstate je zložka stromového pohľadu ľahko programovateľná. Existuje niekoľko metód na pridanie nových uzlov do stromu a nastavenie ich hierarchie.
Tu je postup, ako pridať 10 uzlov do stromového prehľadu (s názvom „TreeView1“). Všimnite si, že vlastnosť Položky poskytuje prístup ku všetkým uzlom v strome. AddChild pridá nový uzol do stromového prehľadu. Prvý parameter je nadradený uzol (na vytvorenie hierarchie) a druhým parametrom je text uzla.
AddChild vráti novo pridaný TTreeNode. Vo vyššie uvedenom vzorka kódu, všetkých 10 uzlov sa pridá ako koreňové uzly (nemajú nadradený uzol).
V komplikovanejších situáciách by ste chceli, aby vaše uzly obsahovali viac informácií - najlepšie by mali mať niektoré špeciálne hodnoty (vlastnosti), ktoré sú špecifické pre projekt, ktorý vyvíjate.
Povedzme, že chcete zobraziť údaje o objednávke zákazníka z vašej databázy. Každý zákazník môže mať viac objednávok a každá objednávka je zložená z viacerých položiek. Toto je hierarchický vzťah, ktorý je možné zobraziť v stromovom prehľade:
Vo vašej databáze by bolo viac informácií pre každú objednávku a pre každú položku. V stromovom prehľade sa zobrazuje aktuálny stav (len na čítanie) - a chcete vidieť podrobnosti o vybranej objednávke (alebo dokonca o položke).
Keď používateľ vyberie uzol „Order_1_1“, aby sa zobrazili podrobnosti objednávky (celková suma, dátum atď.).
V tom čase môžete načítať požadované údaje z databázy, ALE musíte poznať jedinečný identifikátor (povedzme celočíselnú hodnotu) vybratého príkazu na získanie správnych údajov.
Potrebujeme spôsob, ako uložiť tento identifikátor objednávky spolu s uzlom, ale nemôžeme použiť vlastnosť Text. Vlastná hodnota, ktorú musíme uložiť v každom uzle, je celé číslo (len príklad).
Ak sa takáto situácia stane, môžete byť v pokušení vyhľadať vlastnosť Tag (veľa komponentov Delphi má), ale vlastnosť Tag nie je vystavená triede TTreeNode.
Pridajte vlastné údaje do stromových uzlov: TreeNode. Vlastnosť údajov
Vlastnosť Data v uzle stromu vám umožňuje priradiť vaše vlastné údaje k uzlu stromu. Údaje sú a ukazovateľ a môžu ukazovať na objekty a záznamy. Zobrazenie údajov XML (RSS Feed) v TreeView ukazuje, ako uložiť a typ záznamu premenná do vlastnosti Data stromového uzla.
Mnoho tried typu položiek vystavuje vlastnosť Data - môžete použiť na uloženie ľubovoľného objektu spolu s položkou. Príkladom je TListItem komponentu TListView. tady ako pridať objekty do vlastnosti Data.
Pridajte vlastné údaje do stromových uzlov: TreeView. CreateNodeClass
Ak nechcete používať vlastnosť Data v TTreeNode, ale radšej by ste chceli rozšíriť svoj vlastný TreeNode o niekoľko vlastností, Delphi má tiež riešenie.
Povedzme, že to chceš urobiť
Tu je návod, ako rozšíriť štandardný TTreeNode o niekoľko vlastných vlastností:
- Vytvorte svoj TMyTreeNode rozšírením TTreeNode.
- Pridajte vlastnosť reťazca MyProperty.
- Manipulujte s OnCreateNodeClass pre stromové zobrazenie, aby ste určili, že by mala byť vytvorená vaša trieda uzlov.
- Odhaľte niečo ako vlastnosť TreeView1_SelectedNode na úrovni formulára. Toto by malo byť typu TMyTreeNode.
- Zaobchádzajte so stromovým prepínačom OnChange, ak chcete do vybraného uzla zapísať hodnotu vybraného uzla.
- Na čítanie alebo zápis novej vlastnej hodnoty použite TreeView1_Selected.myProperty.
Toto je úplný zdrojový kód (TButton: „Button1“ a TTreeView: „TreeView1“ vo formulári):
Tentoraz sa nepoužíva vlastnosť Data triedy TTreeNode. Skôr rozširujete triedu TTreeNode, aby ste mali vlastnú verziu stromového uzla: TMyTreeNode.
Pomocou udalosti OnCreateNodeClass stromového prehľadu namiesto štandardnej triedy TTreenode vytvoríte uzol svojej vlastnej triedy.