Hallo,
ich benötige bei einem VirtualStringTree eine Stringlist für jeden einzelnen Knoten. Nun dachte ich, ich könnes es ganz einfach lösen:
Delphi-Quellcode:
type
PTreeData = ^TTreeData;
TTreeData = record
fCaption: string;
fStringList: TStrings;
end;
...
function AddVSTStructure(AVST: TCustomVirtualStringTree; ANode: PVirtualNode;
ARecord: TTreeData): PVirtualNode;
var
Data: PTreeData;
begin
result := AVST.AddChild(ANode);
Data := AVST.GetNodeData(result);
Avst.ValidateNode(result, false);
Data^.fCaption:= ARecord.fCaption;
Data^.fStringList:= ARecord.fStringList;
end;
procedure TForm1.VirtualStringTree1FreeNode(Sender: TBaseVirtualTree;
Node: PVirtualNode);
var
Data: PTreeData;
begin
Data := VirtualStringTree1.GetNodeData(Node);
if Assigned(Data) then begin
Data.fCaption := '';
Data.fStringList.Free;
end;
end;
...
// Beispiel aufruf zum Erzeugen eines neuen Eintrags:
procedure TForm1.FormCreate(Sender: TObject);
var
TreeData: TTreeData;
pvnode: PVirtualNode;
begin
pvnode := VirtualStringTree1.RootNode;
TreeData.fCaption:= 'Test';
if not Assigned(TreeData.fStringList) then
TreeData.fStringList:= TStringlist.Create;
TreeData.fStringList.Add('Test1');
AddVSTStructure(VirtualStringTree1, pvnode, TreeData);
end;
Doch diese Variante funktioniert nicht, wo liegt mein Fehler ?