Hallo Christian,
ich frage nochmal nach, was genau der Zweck dieses objektorientierten Aufbaus ist.
Nehmen wir an, diese Infos soll Dein Objekt halten:
Delphi-Quellcode:
type
TOrdner = class(TObject)
Ordnername : String;
Expanded: Boolean;
end;
In dem Fall würden ja alleine die Infos im gefüllten TreeView
aussreichen, d.h. du bräuchtest eigentlich nicht noch Objekte anlegen,
sondern könntest bei Bedarf direkt auf den Node des TreeViews zugreifen.
Falls das Objekt größer werden soll, hier noch mal eine genauere
Beschreibung meiner Umsetzung:
Dem TreeView kannst du anstatt nur einer Beschreibung auch eine
Beschreibung mit einem Pointer mit auf den Weg geben, also so:
NewTreeNode:= aTreeView.Items.AddChildObject(aParent, 'Nodename', Pointer);
Du könntest also beim Füllen des TreeViews ein Ordner-Objekt
erstellen und dessen Pointer an den Knoten dranhängen, etwa so:
Delphi-Quellcode:
{ Ordner-Objekt erstellen }
NewFolder:= TFolder.Create(aXmlNode.Nodes[i].AttributeByName['Name']);
{ Pointer des Ordner-Objektes dem erstellten Knoten übergeben, sowie
den oben bereits übergebenen Ordnernamen }
NewTreeNode:= aTreeView.Items.AddChildObject(aParent, NewFolder.Foldername, NewFolder);
Dabei habe ich das Ordner-Objekt so deklariert:
Delphi-Quellcode:
type
TFolder = class(TObject)
private
fFoldername : String;
fExpanded: Boolean;
public
constructor Create(const aFoldername: string);
property FolderName: string read fFoldername write fFoldername;
end;
Ganz wichtig zu sagen ist jedoch, dass der TreeView nicht automatisch
auch die Freigabe dieser erstellen Ordner-Objekte durchführt.
Löschst du also einen Knoten aus dem Baum, bist du auch für die
Freigabe des Ordner-Objektes verantwortlich.
Es gibt eine stark erweiterte Tree-Komponente, die sich
TVirtualStringTree
nennt (oft auch unter VST hier im Forum zu finden). Dieser ist von
Grund auf neu programmiert und besitzt u.a. auch eine automatische
Speicherverwaltung der übergebenen Objekte.
Nun zum Abrufen des Knotens mit Objekt:
Delphi-Quellcode:
{ Normaler Text des Knotens }
ShowMessage(TreeView1.Selected.Text);
{ Über casten mit TFolder kannst du den Pointer des Knotens
gezielt ansprechen und die Eigenschaft Foldername abfragen }
ShowMessage(TFolder(TreeView1.Selected.Data).FolderName);
Im obigen Fall würde jetzt beides mal das gleiche angezeigt,
aber du kannst ja dein Objekt wie gewünscht aufbauen.
Grüße
Jürgen