Mit TFilestream die Datei wieder öffnen. Dann kannst du die Länge wieder auslesen. Nachdem du die Länge hast, schreibst du alles, was sich danach befindet in dein Memo. Allerdings nur so oft, wie in der Länge angegeben. Selbiges machst du mit dem JPEG.
Delphi-Quellcode:
procedure Laden();
var
lStream: TStream;
lStartPos: Int64;
lDataSize: Cardinal;
TextStream, JPEGStream: TMemoryStream;
begin
lStream := TFileStream.Create(YourFileName, fmOpenRead);
try
// Länge lesen
lStream.Read(lDataSize, sizeOf(lDataSize));
TextStream := TMemoryStream.Create;
TextStream.Size = lDataSize;
// Text auslesen
lStream.Read(TextStream.Memory, lDataSize);
YourMemo.Lines.LoadFromStream(TextStream);
TextStream.Free;
// Bild laden
lStream.Position := sizeof(lDataSize) + lDataSize; // Diese Zeile sollte weggelassen werden können, da der Stream ja schon die richtige Position hat.
// Länge lesen
lStream.Read(lDataSize, sizeOf(lDataSize));
JPEGStream := TMemoryStream.Create;
JPEGStream.Size = lDataSize;
// Text auslesen
lStream.Read(JPEGStream.Memory, lDataSize);
YourJPEG.LoadFromStream(JPEGStream);
JPEGStream.Free;
finally
lStream.Free;
end;
end;
ungetestet, sollte aber funktionieren.
Bernhard
ADD: Was der Code von SirThornberry macht ist eigentlich nicht schwer: Er erstellt einen Stream (Filestream zum Lesen/Schreiben von Dateien). In diesen Stream wird eine 0 (Datentyp: Cardinal) geschrieben. Dann kommt der Text rein. Streamlänge - Länge von Cardinal = Textlänge. Diese Textlänge wird jetzt ganz vorne hingeschrieben. Danach macht er hintendran weiter: 0 (Cardinal) reinschreiben, dann das Bild hintendran. Jetzt noch die Länge des Bildes berechnen und die 0 vor dem Bild ersetzen, fertig.