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).