So, vielen Dank erstmal für die Hilfe. Meine Speicherroutine sieht jetzt so aus:
Delphi-Quellcode:
TTermine = record
Name : string;
Zeit : TTime;
end;
TPerson = class(TObject)
private
FVorname : string;
FNachname : string;
FBild : TImage;
FTermine : array of TTermine;
protected
public
...
...
procedure SaveFahrer(ID: string);
...
...
end;
TFieldLength = record
FVorname : Cardinal;
FNachname : Cardinal;
FBild : Cardinal;
FTermine : Cardinal;
end;
procedure TPerson.SavePerson(ID: string);
var
FileStream : TFileStream;
PicStream : TMemoryStream;
TempString : string;
FieldLength : TFieldLength;
begin
// Bilddaten packen
PicStream := TMemoryStream.Create;
FBild.Picture.Bitmap.SaveToStream(PicStream);
// Strings packen
TempString := FVorname + FNachname;
FieldLength.FVorname := length(FVorname);
FieldLength.FNachname := length(FNachname);
FieldLength.FBild := PicStream.Size;
FieldLength.FTermine := sizeof(FTermine)
FileStream := TFileStream.Create(ID + '.dat', fmCreate);
// LängenInfo schreiben
FileStream.Write(FFieldLength, SizeOf(FFieldLength));
// Strings schreiben
FileStream.Write(TempString , Length(TempString ));
// Array schreiben
FileStream.Write(FTermine, SizeOf(FTermine));
// Bilddatem schreiben
FileStream.CopyFrom(PicStream, PicStream.Size);
FreeAndNil(FileStream);
end;
Ist das so korrekt? Kann man da irgendetwas besser lösen?
Bei der Leseroutine habe ich auch noch Probleme. Denke dass das mit den Strings so funtioniert. Aber vielleicht kann man das auch noch eleganter machen. Bin für jeden Hinweis dankbar.
Allerdings weiss ich nicht wie das Bild zurückladen kann und wie ich genau mein array of record handeln muss:
Delphi-Quellcode:
procedure TPerson.LoadPerson(ID: string);
var
FileStream : TFileStream;
PicStream : TMemoryStream;
TempString : string;
begin
FileStream := TFileStream.Create(ID + '.dat', fmInput);
// LängenInfo lesen
FileStream.Read(FFieldLength, sizeof(FFieldLength));
FileStream.Position := FileStream.Position + sizeof(FFieldLength);
// Strings lesen
FileStream.Read(FVorname, length(FVorname));
FileStream.Position := FileStream.Position + FFieldLength.FVorname;
FileStream.Read(FNachname, length(FNachname));
FileStream.Position := FileStream.Position + FFieldLength.FNachname;
// Record lesen <- geht so schonmal nicht
//FileStream.Read(FTermine, FTermine);
//FileStream.Position := FileStream.Position + FFieldLengthFTermine;
// Bilddaten lesen
// ??????
FreeAndNil(FileStream);
end;
Bräuchte also noch etwas Hilfe