Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi jvRichEdit RTF speichern (https://www.delphipraxis.net/144255-jvrichedit-rtf-speichern.html)

TheMiller 3. Dez 2009 12:56


jvRichEdit RTF speichern
 
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!

TheMiller 5. Dez 2009 11:16

Re: jvRichEdit RTF speichern
 
Könnt ihr bitte nochmal schauen? Ich finde den Fehler nicht...

Danke im Voraus

Franzelchen 5. Dez 2009 12:07

Re: jvRichEdit RTF speichern
 
Ohne es getestet zu haben und mit wenig Ahnung, versuchs doch mal mit JvRE1.LoadfromFile oder JvRE1.SaveToFile.

TheMiller 5. Dez 2009 12:20

Re: jvRichEdit RTF speichern
 
Ehm... Ich habe mehrere jvRichEdits in dem Programm. Bei den anderen geht's. Ich muss also was im OI verstellt haben, ohne es (noch) zu wissen. Hab jetzt die Komponente gelöscht, kompiliert, die Komponente wieder auf's Form geschmissen und jetzt geht's.

Sorry für die "Aufruhe" ;)

Danke trotzdem


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:00 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz