Thema: Delphi jvRichEdit RTF speichern

Einzelnen Beitrag anzeigen

Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#1

jvRichEdit RTF speichern

  Alt 3. Dez 2009, 12:56
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!
  Mit Zitat antworten Zitat