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
 
#15

Re: VST Speichern und Laden

  Alt 25. Feb 2008, 21:53
Hehe, gerne.

Spass an:

Programmiere wie du möchtest und solange du möchtest.

Nur das hier alles zu schreiben:
Delphi-Quellcode:
procedure TForm1.VST1SaveNode(Sender: TBaseVirtualTree; Node: PVirtualNode;
  Stream: TStream);
var
  daten: TArchiv; Len: Integer;
begin
  daten := TArchiv(vst1.GetNodeData(Node)^);

  Len := Length(Daten.Filename);
  Stream.write(Len, SizeOf(Len));
  Stream.write(PChar(Daten.Filename)^, Len);

  Len := Length(Daten.Titel);
  Stream.write(Len, SizeOf(Len));
  Stream.write(PChar(Daten.Titel)^, Len);

  Len := Length(Daten.Interpret);
  Stream.write(Len, SizeOf(Len));
  Stream.write(PChar(Daten.Interpret)^, Len);

  Len := Length(Daten.Album);
  Stream.write(Len, SizeOf(Len));
  Stream.write(PChar(Daten.Album)^, Len);

  Len := Length(Daten.Genre);
  Stream.write(Len, SizeOf(Len));
  Stream.write(PChar(Daten.Genre)^, Len);

  Stream.write(Daten.Dauer, sizeof(ttime));

  Stream.write(Daten.Bewertung, sizeof(Daten.Bewertung)); //habs auch mal mit sizeof(integer) versucht...

  Stream.write(Daten.Counter, sizeof(Daten.Counter)); // ...hier auch...

  Stream.write(Daten.Datum, sizeof(tdate));

end;

procedure TForm1.VST1LoadNode(Sender: TBaseVirtualTree; Node: PVirtualNode;
  Stream: TStream);
var
  daten: TArchiv; Len: Integer;
begin
  daten := TArchiv(vst1.GetNodeData(Node)^);

  Stream.read(Len, SizeOf(Len));
  SetLength(Daten.Filename, len);
  Stream.read(PChar(Daten.Filename)^, Len);

  Stream.read(Len, SizeOf(Len));
  SetLength(Daten.Titel, len);
  Stream.read(PChar(Daten.Titel)^, Len);

  Stream.read(Len, SizeOf(Len));
  SetLength(Daten.Interpret, len);
  Stream.read(PChar(Daten.Interpret)^, Len);

  Stream.read(Len, SizeOf(Len));
  SetLength(Daten.Album, len);
  Stream.read(PChar(Daten.Album)^, Len);

  Stream.read(Len, SizeOf(Len));
  SetLength(Daten.Genre, len);
  Stream.read(PChar(Daten.Genre)^, Len);

  Stream.read(Daten.Dauer, sizeof(ttime));

  Stream.read(Daten.Bewertung, sizeof(Daten.Bewertung)); // ...und hier...

  Stream.read(Daten.Counter, sizeof(Daten.Counter)); //..und hier

  Stream.read(Daten.Datum, sizeof(tdate));
end;
dauert länger als:
Delphi-Quellcode:
procedure TForm1.VST1LoadNode(Sender: TBaseVirtualTree; Node: PVirtualNode;
  Stream: TStream);
var
  daten: TArchiv; Len: Integer;
begin
  daten := TArchiv(vst1.GetNodeData(Node)^);
  Stream.LoadComponent(daten);
end;

procedure TForm1.VST1SaveNode(Sender: TBaseVirtualTree; Node: PVirtualNode;
  Stream: TStream);
var
  daten: TArchiv; Len: Integer;
begin
  daten := TArchiv(vst1.GetNodeData(Node)^);
  Stream.SaveComponent(daten);
end;
Hinzukommt noch, wenn du dein Objekt erweiterst, kann es deine Routine nicht mehr laden.
Die Satzlänge passt dann nicht mehr.

So Spass bei Seite. Du solltest versuchen wenig Code zu schreiben.
Hat den großen Vorteil bei großen Projekten, den Überblick zu behalten.

Weniger Code, weniger Fehler, weniger zu debuggen, mehr Übersicht (,weniger Dateigröße).
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat