Hallo,
ich habe ein Programm, dass ein JPG öffnent. Dann möchte ich dazu ein Text schreiben. Der Text, das Bild und das Datum sollen in eine neue Datei geschrieben werden. Wenn ich nur den Text und das Datum abspeichere, dann funktioniert das ohne Probleme. Sobald ich aber das Bild mit abspeichern möchte, kommt kein Fehler, aber es wird auch keine Datei erzeugt.
Ich habe dann versucht, dass Bild direkt wieder mit SaveToFile in eine Datei zu schreiben, aber dabei wird auch keine Datei erstellt.
Mein Code zum Laden des Bildes:
Delphi-Quellcode:
if form1.OpenPictureDialog1.execute then begin
Data := self.data(form1.MCalendar.Date);
Data.FPicture.Free;
Data.FPicture := TJpegImage.Create;
Data.FPicture.CompressionQuality := 20;
Data.FPicture.LoadFromFile(form1.OpenPictureDialog1.FileName);
form1.IPicture.Picture.Bitmap.Assign(Data.FPicture);
end;
Das Bild wird auf dem Image (IPicture) angezeigt.
So nun die Methode zum Speichern des Textes:
Delphi-Quellcode:
procedure TAdmin.save;
var stream:TFileStream;
i,n:Integer;
begin
n :=-1;
n := high(FData);
if n >= 0
then begin
stream := TFileStream.Create(InitialFile, fmCreate);
try
try
stream.
Write(n, sizeOf(n));
for I := 0
to n
do
FData[i].save(stream);
except
on e:
exception do showmessage(e.
Message);
end;
finally
FreeAndNil(stream);
end;
end;
end;
Data := self.data(form1.MCalendar.Date);
Data.FText := form1.MMessageInput.Text;
if Data.FPicture <>
nil then
Data.FPicture.SaveToFile('
test.jpg');
// Einfach nur zum Testen
Data.FPicture ist nicht NIL und es kommt auch kein Fehler beim Ausführen von SaveToFile, aber die Datei wird nicht erzeugt.
So und nun mein Code zum Speichern
Delphi-Quellcode:
procedure TAdmin.save;
var stream:TFileStream;
i,n:Integer;
begin
n :=-1;
n := high(FData);
if n >= 0
then begin
stream := TFileStream.Create(InitialFile, fmCreate);
try
try
stream.
Write(n, sizeOf(n));
for I := 0
to n
do
FData[i].save(stream);
except
on e:
exception do showmessage(e.
Message);
end;
finally
FreeAndNil(stream);
end;
end;
end;
und die Methode TData.save(s:Stream)
Delphi-Quellcode:
procedure TData.save(stream: TFileStream);
var ms: TMemoryStream;
len: Int64;
strlen: Integer;
begin
if stream <>
nil then begin
stream.
Write(FDate, sizeOf(FDate));
strlen := length(FText);
stream.
Write(strlen, sizeof(strlen));
stream.
Write(FText[1], strlen);
ms := TMemoryStream.Create;
try
try
FPicture.SaveToStream(ms);
len := ms.Size;
stream.
Write(len, sizeOf(len));
ms.SaveToStream(stream);
except
on e:
exception do showmessage(e.
Message);
end;
finally
FreeAndNil(ms);
end;
end;
end;
Das Abspeichern des Bildes habe ich von
http://www.delphipraxis.net/internal....php?p=1030334.
Vielen Dank und Viele Grüße
Stefan