Thema: Delphi VST Speichern und Laden

Einzelnen Beitrag anzeigen

generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.415 Beiträge
 
Delphi XE5 Professional
 

Re: VST Speichern und Laden

  Alt 28. Feb 2008, 17:00
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;
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat