Spremite više prilagođenih podataka u čvor na drveću u Delfima

TTreeView Delphi komponenta prikazuje hijerarhijski popis stavki - čvorovi drveća. Čvor je predstavljen tekstom čvora i izbornom slikom. Svaki čvor u prikazu stabla instanca je klase TTreeNode.

Dok stavke u vrijeme dizajna možete ispunjavati prikazom stabla, koristeći TreeView uređivač predmeta, u većini ćete slučajeva ispuniti prikaz stabla u vrijeme izvođenja - ovisno o aplikaciji.

Uređivač stavki TreeView otkriva da postoji samo nekoliko informacija koje možete "priložiti" čvoru: tekst i nekoliko slikovnih indeksa (za normalno stanje, prošireno, odabrano i slično).

U osnovi, jednostavno je programirati komponentu pogleda na stablo. Postoji nekoliko metoda za dodavanje novih čvorova na stablo i postavljanje njihove hijerarhije.

Evo kako dodati 10 čvorova u prikaz stabla (nazvanih "TreeView1"). Imajte na umu da svojstvo Items pruža pristup svim čvorovima na stablu. AddChild dodaje novi čvor prikazu stabla. Prvi parametar je nadređeni čvor (za izgradnju hijerarhije), a drugi parametar je tekst čvora.

instagram viewer

AddChild vraća novo dodan TTreeNode. U gore navedenom uzorak koda, svih 10 čvorova dodaje se kao korijenski čvorovi (nemaju nadređeni čvor).

U svim složenijim situacijama želite da vaši čvorovi nose više informacija - po mogućnosti imati neke posebne vrijednosti (svojstva) specifične za projekt koji razvijate.

Recimo da želite prikazati podatke o stavkama kupca iz vaše baze podataka. Svaki kupac može imati više narudžbi i svaka se narudžba sastoji od više predmeta. Ovo je hijerarhijski odnos koji se može prikazati u prikazu stabla:

U vašoj bazi podataka bilo bi više informacija za svaku narudžbu i za svaki artikl. Prikaz stabla prikazuje trenutno stanje (samo za čitanje) - i želite vidjeti detalje za odabranu narudžbu (ili čak po stavci).

Kad korisnik odabere čvor "Narudžba_1_1", želite da se detalji narudžbe (ukupan zbroj, datum itd.) Prikazuju korisniku.

Tada možete dohvatiti tražene podatke iz baze, ali morate znati jedinstveni identifikator (recimo cijelu vrijednost) odabranog naloga da biste preuzeli ispravne podatke.

Potreban nam je način kako pohraniti ovaj identifikator naloga zajedno s čvorom, ali ne možemo koristiti svojstvo Text. Prilagođena vrijednost koju trebamo pohraniti u svaki čvor je cijeli broj (samo primjer).

Kada se takva situacija dogodi, možda biste bili u iskušenju da potražite svojstvo Tag (mnogi Delphi komponenti imaju), ali klasa TTreeNode ne izlaže svojstvo Tag.

Dodajte prilagođene podatke čvorovima stabla: TreeNode. Svojstvo podataka

Svojstvo Data čvora stabla omogućuje vam da svoje prilagođene podatke povežete s čvorom stabla. Podaci su a pokazivač a može ukazivati ​​na predmete i zapise. Prikazivanje XML (RSS feed) podataka u TreeViewu pokazuje kako pohraniti vrsta zapisa varijabla u svojstvo Data čvora stabla.

Mnoge klase vrsta predmeta izlažu svojstvo Podaci - možete ih koristiti za spremanje bilo kojeg objekta zajedno s stavkom. Primjer je TListItem komponente TListView. Evo kako dodati objekte u svojstvo Data.

Dodajte prilagođene podatke čvorovima stabla: TreeView. CreateNodeClass

Ako ne želite koristiti svojstvo podataka TTreeNode, već biste željeli da vaš vlastiti TreeNode bude proširen s nekoliko svojstava, Delphi također ima rješenje.

Recite da želite to moći učiniti

Evo kako proširiti standardni TTreeNode s nekoliko vlastitih svojstava:

  1. Stvorite svoj TMyTreeNode tako da proširite TTreeNode.
  2. Dodajte mu string svojstvo MyProperty.
  3. Rukujete OnCreateNodeClassom za prikaz stabla kako biste odredili da bi trebala biti kreirana klasa čvora.
  4. Izložite nešto poput svojstva TreeView1_SelectedNode na razini obrasca. To bi bilo tipa TMyTreeNode.
  5. Rukujemo onChange prikazom stabla kako bismo na SelectedNode zapisali vrijednost odabranog čvora.
  6. Koristite TreeView1_Selected.myProperty za čitanje ili pisanje nove prilagođene vrijednosti.

Evo potpunog izvornog koda (TButton: "Button1" i TTreeView: "TreeView1" na obrascu):

Ovaj put se ne koristi svojstvo Data klase TTreeNode. Umjesto toga, proširite klasu TTreeNode da imate vlastitu verziju čvora stabla: TMyTreeNode.

Korištenjem događaja OnCreateNodeClass u prikazu stabla stvorite čvor prilagođene klase umjesto standardne klase TTreenode.

instagram story viewer