Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Wie aus rtf-Code Klartext erhalten?


galagher - So 15.07.18 20:58
Titel: Wie aus rtf-Code Klartext erhalten?
Hallo!

Ich möchte aus rtf-Code den Klartext erhalten. Momentan erzeuge ich ein TJvRichEdit, und weil dieses ein Parent benötigt, muss ich auch ein TForm als dessen übergeordnetes Element erzeugen. In dieses TJvRichEdit lese ich dann den rtf-Code ein, und eine Funktion gibt mir dann den Klartext zurück. Das alles funktioniert zwar, gefällt mir aber nicht.

Wie kann ich also aus rtf-Ccode den reinen Text ohne Formatierungs- und Steuerzeichen extrahieren, ohne den Umweg über eine temporäres TJvRichEdit?


espen - Mo 16.07.18 10:21

https://www.delphipraxis.net/65439-plaintext-aus-rtf-auslesen.html


Delete - Mo 16.07.18 11:43

- Nachträglich durch die Entwickler-Ecke gelöscht -


galagher - Mo 16.07.18 12:14

user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:
@ espen
In deinem verlinkten Beitrag wird ebenso auf ein TRichEdit zurückgegriffen. Das möchte der TE aber nicht.

@ galagher
Das, was dir nicht gefällt, wäre aber der richtige Ansatz.
Irgendwie muss TRichEdit das ja machen, ich dachte, jemand hat den nötigen Code dafür!
Was mir nich gefällt, ist das erzeugen einer Komponente (ok, das wäre noch nicht schlimm), aber das Erzeugen einer TForm finde ich unelegant. .CreateParented kannte ich nicht, werde die Codes aber ausprobieren!


Delete - Mo 16.07.18 12:21

- Nachträglich durch die Entwickler-Ecke gelöscht -


galagher - Mo 16.07.18 19:36

Dein zweites Beispiel gefällt mir wegen Application.MainForm nicht so gut!
Zum ersten Beispiel: Was ist der Unterschied zwischen CreateParented(HWND(-3)) und CreateParented(HWND_MESSAGE)?


Delete - Mo 16.07.18 20:41

- Nachträglich durch die Entwickler-Ecke gelöscht -


galagher - Mo 16.07.18 21:22

Dann danke ich euch für eure Hilfe!

Ich verwende nun diesen Code:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
function Rtf2Txt(const rtf: AnsiString): String;
begin
  with TRichEdit.CreateParented(HWND_MESSAGE) do
  begin
    SendMessage(Handle, WM_SETTEXT, 0, NativeInt(@rtf[1]));
    Result := Text;
    Free;
  end;
end;


Delete - Di 17.07.18 12:16

- Nachträglich durch die Entwickler-Ecke gelöscht -