also jetzt hab ichs so probiert:
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;
speichern geht eigentlich, die datei wird auch erstellt und da ist auch was drin in der datei. beim laden bekomm ich aber jedesmal eine zugriffsverletzung! was mach ich falsch?
bei der zugriffsverletzung wird zuerst etwas in der
unit VirtualTrees rot markiert, und wenn ich wieder F9 drücke kommt die zweite zugriffsverletzung hier:
Delphi-Quellcode:
procedure TForm1.VST1GetText(Sender: TBaseVirtualTree; Node: PVirtualNode;
Column: TColumnIndex; TextType: TVSTTextType; var CellText: WideString);
var
daten: TArchiv;
begin
daten := TArchiv(vst1.GetNodeData(node)^);
case column of
0: celltext := daten.Titel; // <--- diese Zeile wird rot markiert
1: celltext := daten.Interpret;
2: celltext := daten.Album;
3: celltext := daten.Genre;
4: celltext := timetostr(daten.Dauer);
5: celltext := inttostr(daten.Bewertung);
6: celltext := inttostr(daten.Counter);
7: celltext := datetostr(daten.Datum);
end;
end;
@generic
also deine methode hat mich irgendwie noch nicht so richtig überzeugt
wenn du mir einen guten grund nennen kannst, der für deine methode spricht, könnt ich mich ja noch umentscheiden