ich denke das Problem tritt beim Laden auf.
Natürlich müssen die Objekte erzeugt werden.
Der interne Record vom VST speichert NUR den Zeiger auf das Objekt.
bzw. das Load erzeugt das object, allerdings nur wenn du die klasse vorher registierst.
Delphi-Quellcode:
type
TTreehelper = class(TComponent)
private
fabc: string;
published
property abc: string read fabc write fabc;
end;
pTreehelper = ^TTreehelper;
{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject);
begin
VirtualStringTree1.LoadFromFile('c:\temp\tree.dat');
end;
procedure TForm2.Button2Click(Sender: TObject);
begin
VirtualStringTree1.SaveToFile('c:\temp\tree.dat');
end;
procedure TForm2.Button3Click(Sender: TObject);
var
a: TTreehelper;
begin
a:=TTreehelper.Create(nil);
a.abc:='hallo';
VirtualStringTree1.AddChild(nil, a);
a:=TTreehelper.Create(nil);
a.abc:='ballo';
VirtualStringTree1.AddChild(nil, a);
a:=TTreehelper.Create(nil);
a.abc:='callo';
VirtualStringTree1.AddChild(nil, a);
a:=TTreehelper.Create(nil);
a.abc:='dllo';
VirtualStringTree1.AddChild(nil, a);
end;
procedure TForm2.FormCreate(Sender: TObject);
begin
VirtualStringTree1.NodeDataSize:=sizeof(TTreehelper);
RegisterClass(TTreehelper);
end;
procedure TForm2.VirtualStringTree1FreeNode(Sender: TBaseVirtualTree;
Node: PVirtualNode);
var
a: TTreehelper;
begin
a:=TTreehelper(Sender.GetNodeData(node)^);
a.free;
end;
procedure TForm2.VirtualStringTree1GetText(Sender: TBaseVirtualTree;
Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
var CellText: WideString);
var
a: TTreehelper;
begin
a:=TTreehelper(Sender.GetNodeData(node)^);
CellText:=a.abc;
end;
procedure TForm2.VirtualStringTree1LoadNode(Sender: TBaseVirtualTree;
Node: PVirtualNode; Stream: TStream);
var
a: TTreehelper;
p: pTreehelper;
begin
a:=Stream.ReadComponent(nil) as TTreehelper;
p:=sender.GetNodeData(node);
p^:=a;
end;
procedure TForm2.VirtualStringTree1SaveNode(Sender: TBaseVirtualTree;
Node: PVirtualNode; Stream: TStream);
var
a: TTreehelper;
begin
a:=TTreehelper(Sender.GetNodeData(node)^);
Stream.WriteComponent(a);
end;