Hallo,
ich möchte ein Bitmap als RTF-Variable im Dokument speichern:
procedure TForm1.Button1Click(Sender: TObject);
var
ms: TMemorystream;
begin
WPRichText1.RTFVariables.Strings['TEST'] := 'Just a string';
WPRichText1.RTFVariables.AddStream('demoimage').Clear;
ms := WPRichText1.RTFVariables.AddStream('Bild1');
ms.Clear;
ms.LoadFromFile('c:\temp\pool.bmp');
WPRichText1.SaveToFile('c:\tmp\1.wpt', false, 'WPT');
WPRichText1.SaveToFile('c:\tmp\2.rtf', false, 'RTF');
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
// WPRichText1.LoadFromFile('c:\tmp\1.wpt', true, 'WPT');
WPRichText1.LoadFromFile('c:\tmp\2.rtf', true, 'RTF');
Image1.Picture.Bitmap.LoadFromStream
(WPRichText1.RTFVariables.AddStream('Bild1'));
ShowMessage(WPRichText1.RTFVariables.Strings['TEST']);
end;
Alles anzeigen
Speichere und lade ich das Ganze als RTF funktioniert es, benutze ich die auskommentierte Variante mit WPT-Format, gibt es keine Fehlermeldung, aber das Bild bleibt leer!
Dabei fällt auf dass dir RTF-Datei 2,74MB groß ist, die WPT nur 1,86MB
WriteObjectMode steht auf wobRTF.
Nach ein paar Versuchen habe ich jetzt
procedure TForm1.Button2Click(Sender: TObject);
var
ms: TMemorystream;
begin
WPRichText1.LoadFromFile('c:\tmp\1.wpt', true, 'WPT');
// WPRichText1.LoadFromFile('c:\tmp\2.rtf', true, 'RTF');
ms := WPRichText1.RTFVariables.AddStream('Bild1');
ms.Position := 0;
Image1.Picture.Bitmap.LoadFromStream(ms);
// Image1.Picture.Bitmap.LoadFromStream
// (WPRichText1.RTFVariables.AddStream('Bild1'));
ShowMessage(WPRichText1.RTFVariables.Strings['TEST']);
end;
Alles anzeigen
und das Laden funktioniert jetzt auch vom WPT-Format!
Für mich bedeutet das:
Im RTF-Format ist der Zeiger nach dem AddStream am Anfang des Streams, beim Lesen als WPT-Format aber am Ende und muss erst wieder an den Anfang gesetzt werden!
Kann das in einer späteren Version "gleichgezogen" werden damit der hier im Forum gepostete Beispielcode
mit beiden Varianten (WPT und RTF) funktioniert?
Ciao
Stefan