Ich habe ein VirtualStringTree auf meinem Formular mit dahinterstehender Klasse sowie generische TObjectList für die Datenhaltung. Ganz so wie es sein soll.
Dummerweise wird bei meinem Node der Text des Child-Nodes aber falsch angezeigt. Es ist bei jedem Child-Node der Text des
ersten Child-Nodes.
Mache ich was falsch?
Delphi-Quellcode:
procedure TVSTEvents.VSTInitNode(Sender: TBaseVirtualTree; ParentNode, Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates);
begin
Node.SetData<TVSTData>(VSTDataList[Node.Index]);
if TBaseVirtualTree(Sender).GetNodeLevel(Node) = 0 then
Include(InitialStates, ivsHasChildren);
end;
procedure TVSTEvents.VSTInitChildren(Sender: TBaseVirtualTree; Node: PVirtualNode; var ChildCount: Cardinal);
begin
if TBaseVirtualTree(Sender).GetNodeLevel(Node) = 0 then
ChildCount := 1;
end;
procedure TVSTEvents.VSTGetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: string);
var
VSTData: TVSTData;
begin
VSTData:= Node.GetData<TVSTData>;
if not Assigned(VSTData) then
Exit;
case TBaseVirtualTree(Sender).GetNodeLevel(Node) of
0:
CellText := VSTData.Produkt;
1:
CellText := VSTData.Preis;
end;
end;
Die Daten liegen korrekt vor. Das sehe ich, wenn ich das hier schreibe
Delphi-Quellcode:
0:
CellText := VSTData.Produkt + ' - ' + VSTData.Preis;
Wenn ich aus einer Textdatei Daten auslese und drei Nodes erzeuge mit den Daten wie unten zu sehen, dann sind die Node-texte bei Level 0 korrekt aber Level 1, also die Child-Nodes, zeigen alle 0,79 an:
- Milch, 0,79
- Käse, 1,99
- Mineralwasser, 0,39