Hallo,
ich habe ein merkwürdiges Verhalten beim Speichern und laden von RTF-Texten mit den jvRichEdits festgestellt.
Ich habe Methoden zum Auslesen und Laden von RTF-Texten gehabt, die super funktioniert haben. Doch als ich dann von TRichEdit zu TJvRichEdit wechselte, speichert meine Methode nur noch RTF-Texte, die formatiert sind (fett, unterstrichen, kursiv etc), aber keinen Text ohne eine solche Formatierung.
Formatierte Texte werden wieder schön angezeigt, beim Auslesen. Das verstehe ich absoult nicht.
Hier mal die Methoden zum Speichern und Laden
Delphi-Quellcode:
//Speichern
ss:=TStringStream.Create('
');
try
Editor.Lines.SaveToStream(ss);
ZQuery1.SQL.Clear;
ZQuery1.SQL.Text:='
INSERT INTO "ARTIKEL" ("KID", "TITEL", "ARTIKEL", "TAGS", "ERSTELLT") VALUES' +
'
(:kid, :titel, :artikel, :tags, :erstellt)';
ZQuery1.ParamByName('
kid').AsInteger:=kid;
ZQuery1.ParamByName('
titel').AsString:=utf8encode(eTitel.Text);
ZQuery1.ParamByName('
artikel').AsString:=utf8encode(ss.DataString);
ZQuery1.ParamByName('
tags').AsString:='
';
ZQuery1.ParamByName('
erstellt').AsInteger:=DateTimeToTs(now);
try
ZQuery1.ExecSQL;
except
RaiseSQLError();
end;
finally
ss.Free;
end;
///////////////////////
// Laden //
///////////////////////
function _AddRtfCallback(dwCookie: Longint; pbBuff: PByte;
cb: Longint;
var pcb: Longint): Longint;
stdcall;
begin
try
Result := 0;
pcb := TStream(dwCookie).
Read(pbBuff^, cb);
except
Result := 1;
end;
end;
// Ersetzt die aktuelle Auswahl durch den Inhalt des Streams
procedure AddRtfFromStream(RichEditHandle: THandle; Stream: TStream);
var EditStream: TEditStream;
begin
EditStream.dwCookie := LongInt(Stream);
EditStream.dwError := 0;
EditStream.pfnCallback := @_AddRtfCallback;
SendMessage(RichEditHandle, EM_STREAMIN, SF_RTF + SFF_SELECTION, LongInt(@EditStream));
if EditStream.dwError <> 0
then
raise Exception.Create('
RichEdit operation fehlgeschlagen!'+IntToStr(Editstream.dwError));
end;
[...]
ss.WriteString(utf8decode(Form1.ZQuery1.FieldByName('
ARTIKEL').AsString));
ss.Position:=0;
AddRTFFromStream(Editor.Handle, ss);
Der StreamMode von jvRichEdit steht auf [smSelection]
Vielen Dank im Voraus!