De component TTreeView Delphi geeft een hiërarchische lijst met items-boomknooppunten weer. Een knooppunt wordt gepresenteerd door knooppunttekst en een optionele afbeelding. Elk knooppunt in een structuurweergave is een instantie van een klasse TTreeNode.
Hoewel je tijdens het ontwerpen de boomweergave kunt invullen met items, met behulp van de TreeView Items Editor, vul je in de meeste gevallen je boomweergave tijdens de uitvoering in, afhankelijk van waar je applicatie over gaat.
De TreeView Items Editor onthult dat er slechts een handvol informatie is die u kunt "koppelen" aan een knooppunt: tekst en een paar afbeeldingsindexen (voor de normale status, uitgebreid, geselecteerd en gelijksoortig).
In essentie is de boomweergavecomponent eenvoudig te programmeren. Er zijn een aantal methoden om nieuwe knooppunten aan de structuur toe te voegen en hun hiërarchie in te stellen.
U kunt als volgt 10 knooppunten toevoegen aan de boomstructuur ("TreeView1" genoemd). Merk op dat de eigenschap Items toegang biedt tot alle knooppunten in de boom. AddChild voegt een nieuw knooppunt toe aan de boomstructuur. De eerste parameter is het bovenliggende knooppunt (om de hiërarchie op te bouwen) en de tweede parameter is de knooppunttekst.
AddChild retourneert de nieuw toegevoegde TTreeNode. In het bovenstaande codevoorbeeld worden alle 10 knooppunten toegevoegd als hoofdknooppunten (hebben geen bovenliggend knooppunt).
In meer complexe situaties wilt u dat uw knooppunten meer info bevatten - bij voorkeur enkele speciale waarden (eigenschappen) die specifiek zijn voor het project dat u ontwikkelt.
Stel dat u klantorder-artikelgegevens uit uw database wilt weergeven. Elke klant kan meer bestellingen hebben en elke bestelling bestaat uit meer artikelen. Dit is een hiërarchische relatie die men in een boomstructuur kan weergeven:
In uw database zou er meer informatie zijn voor elke bestelling en voor elk item. De boomstructuur toont de (alleen-lezen) huidige status - en u wilt per order (of zelfs per item) details zien voor de geselecteerde order.
Wanneer de gebruiker het knooppunt "Order_1_1" selecteert, wilt u dat de bestelgegevens (totale som, datum, enz.) Aan de gebruiker worden weergegeven.
U kunt op dat moment de vereiste gegevens uit de database halen, MAAR u zou de unieke identificatie (laten we zeggen een geheel getal) van de geselecteerde volgorde moeten weten om de juiste gegevens te verzamelen.
We hebben een manier nodig om deze bestelidentificatie samen met het knooppunt op te slaan, maar we kunnen de eigenschap Text niet gebruiken. De aangepaste waarde die we in elk knooppunt moeten opslaan, is een geheel getal (slechts een voorbeeld).
Wanneer een dergelijke situatie zich voordoet, kunt u in de verleiding komen om te zoeken naar de eigenschap Tag (veel Delphi-componenten hebben) maar de eigenschap Tag wordt niet weergegeven door de klasse TTreeNode.
Met de eigenschap Data van een boomknooppunt kunt u uw aangepaste gegevens koppelen aan een boomknooppunt. Gegevens zijn een aanwijzer en kunnen verwijzen naar objecten en records. De XML-gegevens (RSS-feed) weergeven in een TreeView laat zien hoe een recordtype variabele kan worden opgeslagen in de eigenschap Data van een boomknooppunt.
Veel itemtypeklassen leggen de eigenschap Data bloot, die u kunt gebruiken om elk object samen met het item op te slaan. Een voorbeeld is het TListItem van een TListView-component. U kunt als volgt objecten toevoegen aan de eigenschap Data.
Als u de eigenschap Data van de TTreeNode niet wilt gebruiken, maar liever uw eigen TreeNode wilt uitbreiden met enkele eigenschappen, heeft Delphi ook een oplossing.
Stel dat je dat wilt kunnen doen
Ga als volgt te werk om de standaard TTreeNode uit te breiden met een paar eigen eigenschappen:
Hier is de volledige broncode (TButton: "Button1" en TTreeView: "TreeView1" op een formulier):
Deze keer wordt de eigenschap Data van de klasse TTreeNode niet gebruikt. In plaats daarvan breidt u de klasse TTreeNode uit met uw eigen versie van een boomknooppunt: TMyTreeNode.
Met behulp van de OnCreateNodeClass-gebeurtenis van de structuurweergave maakt u een knooppunt van uw aangepaste klasse in plaats van de standaard TTreenode-klasse.