Dann gibt es in deiner TObjectList<T>
eine zusätzliche Property die ebenfalls eine TObjectList<T>
oder ein anderer ContainerType ist. Die ChildNodes verweisen dann auf einen Eintrag in dieser Liste. Wenn die Daten vom gleichen Typ sind (wie z.B. bei einer Verzeichnisstruktur), dann ist das recht einfach, da rekursiv. Bedenke, dass du dann im Constructor
ein Create
des ChildContainers und im Destruktor
ein Free
ausführen solltest.
ok, das NodeObjekt um ein TObjectList zu erweitern sollte kein Problem darstellen. Doch wenn es nun Unterebenen gibt. Sollte eigentlich das Objekt, das die Nodedaten beinhaltet auch eine Referenz auf das überliegende Nodedaten-Objekt haben? Würdet ihr sowas machen reingeben?
Derzeit OHNE mehrere Unterebenen schaut es bei mir so aus:
Delphi-Quellcode:
unit Unit1;
interface
//....
type
TNodeDataClass =
class
private
FSpalte1:
string;
FSpalte2:
string;
FSpalte3: Integer;
public
property Spalte1:
string read FSpalte1
write FSpalte1;
property Spalte2:
string read FSpalte2
write FSpalte2;
property Spalte3: Integer
read FSpalte3
write FSpalte3;
end;
TForm1 =
class(TForm)
vst: TVirtualStringTree;
procedure FormCreate(Sender: TObject);
procedure vstInitNode(Sender: TBaseVirtualTree; ParentNode,
Node: PVirtualNode;
var InitialStates: TVirtualNodeInitStates);
procedure vstGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
Column: TColumnIndex; TextType: TVSTTextType;
var CellText: WideString);
private
DataList: TObjectList;
//<--- hier die NodeObjekte von TNodeDataClass
end;
var
Form1: TForm1;
implementation
Nach der Erweiterung von VST Nodes MIT mehreren Unterebenen:
Delphi-Quellcode:
unit Unit1;
interface
//....
type
TNodeDataClass =
class
private
FParentNode: TNodeDataClass;
// <------ eine Referenz auf oberen Knoten notwendig????????
FSpalte1:
string;
FSpalte2:
string;
FSpalte3: Integer;
FSubNodeDataList: TObjectList;
// <- Für eventuelle Subnodes
public
property Spalte1:
string read FSpalte1
write FSpalte1;
property Spalte2:
string read FSpalte2
write FSpalte2;
property Spalte3: Integer
read FSpalte3
write FSpalte3;
end;
TForm1 =
class(TForm)
vst: TVirtualStringTree;
procedure FormCreate(Sender: TObject);
procedure vstInitNode(Sender: TBaseVirtualTree; ParentNode,
Node: PVirtualNode;
var InitialStates: TVirtualNodeInitStates);
procedure vstGetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
Column: TColumnIndex; TextType: TVSTTextType;
var CellText: WideString);
private
RootNodeDataList: TObjectList;
//<--- hier die NodeObjekte von TNodeDataClass
end;
var
Form1: TForm1;
implementation