Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Inhalt eines RichEdits in 2. RichEdit kopieren


Sors - Mo 10.03.08 21:38
Titel: Inhalt eines RichEdits in 2. RichEdit kopieren
Hallo,
ich habe folgendes Problem. Ich habe zwei RichEdits. Ich möchte nun den Inhalt des ersten RichEdits in das zweite RichEdit kopieren, dabei soll aber die Formatierung der einzelen Zeilen erhalten bleiben.

Wenn ich die Funktion  RichEdit2.Lines.Assign(RichEdit1.Lines); verwende, dann wird zwar der Inhalt in das zweite Richedit kopiert, aber die Formatierung der einzelnen Zeilen die ich über SetAttributes festgelegt habe, nicht übernommen.

Wie kann ich die Formatierung mitübernehmen?


Yogu - Mo 10.03.08 23:09

Kopiere einfach den gesamten RTF-Text von einem zum anderen RichEdit:


Delphi-Quelltext
1:
DestRichEdit.Lines.Text := SourceRichEdit.Lines.Text;                    

Da werden dann auch die Formatierungen übernommen, weil die im RTF-Source mit gespeichert werden.


Lannes - Di 11.03.08 00:53

Hallo,

@user profile iconYogu: schon mal erfolgreich damit gewesen?

Da gehts weiter:
[Richedit, VCL Win32] Text aus RTF mit formatierung übertragen [http://www.delphi-forum.de/viewtopic.php?t=51063]
[TRichEdit, VCL Win32] Formatierten RichEdit-Text per String übertragen [http://www.delphi-forum.de/viewtopic.php?t=55781]


Yogu - Di 11.03.08 16:53

user profile iconLannes hat folgendes geschrieben:
Hallo,@user profile iconYogu: schon mal erfolgreich damit gewesen?

Ja. Ich habe bis jetzt den RTF-Code selber geschrieben, da klappte das alles ganz wunderbar. Ich kannte diese Style-Eigenschaften des RichEdits bis jetzt noch gar nicht, da klappt es wohl nicht so einfach. Ich frage mich aber, wie Delphi die Datei dann richtig speichern kann. Da wir nämlich eine RTF-Datei erzeugt, aber im eigentlichen Inhalt der Lines ist der Plain-Text drin. Man lernt immer noch was dazu... :D


Lannes - Di 11.03.08 19:13

Hallo,

user profile iconYogu hat folgendes geschrieben:
Ich frage mich aber, wie Delphi die Datei dann richtig speichern kann.

Das TRichEdit ist ein Wrapper für die im System(Windows) installierte RTF-Komponente die Delphi zum speichern nutzt. Wie das speichern bzw. konvertieren genau funktioniert kann ich Dir nicht sagen, frag doch mal bei Microsoft nach. :)


Sors - Di 11.03.08 21:45

Hallo,
euer Tipp oben hat mir weitergeholfen. Der Anwender kann nun in meinem Programm den gesamten Inhalt des ersten RichEdits ins zweite einfügen, ohne das die Formatierung verloren geht.

In meinem Programm soll der Anwender aber wählen können, ob der ganze Text oder nur eine Auswahl ins zweite RichEdit verschoben werden soll. Im ersten Falle funktioniert nun alles so wie es soll, jedoch für den zweiten Fall nicht, denn ich kann nicht die Eigenschaften einer bestimmten Auswahl im RE ermitteln, sondern nur für den ganzen Inhalt des RE.

Wie schaffe ich es, nur die Auswahl samt Formatierung ins zweite RichEdit zu verschieben? Bei den Tipps oben kann ich immer nur das ganze RichEdit an die procedure die die Formatierung ermittelt übergeben. Gibt es auch eine Möglichkeit die RichEdit.Seltext berücksichigt?


Lannes - Di 11.03.08 23:45

Hallo,

doch in den Beiträgen waren schon Hinweise in die richtige Richtung enthalten:
user profile iconLannes hat folgendes geschrieben:
... user profile iconFlocke in der Delphi-Praxis vorgestellt:
function _AddRtfCallback [http://www.delphipraxis.net/post385793.html#385793]


Die Stichworte sollten weiter helfen: RtfCallback EM_STREAMIN EM_STREAMOUT SFF_SELECTION


Sors - Fr 14.03.08 18:18

Hallo,
mit der
 function _AddRTFCallback
kann ich meine Auswahl durch den Inhalt des Streams ersetzen. Ich möchte aber die Formatierung meiner Auswahl an mein zweites RichEdit weitergeben und nicht meine Auswahl durch den Inhalt des Stream ersetzen.


Lannes - Fr 14.03.08 19:26

Hallo,

ich hab mal für Dich gesucht, in der DP hat user profile icontoms ein Demo zusammengestellt:
Richedit Kopieren [http://www.delphipraxis.net/topic21149_richedit+kopieren.html]
Im Beitrag #9, der Code lässt sich relativ leicht an Deine Bedürfnisse anpassen.


Sors - Sa 15.03.08 14:21
Titel: Hoffentlich letztes Problem
Danke. :O) Genau das, was ich gesucht hatte.

Mein nächstes und hoffentlich letzes Problem ist folgendes:

Kann man über die gleichen funktionen und prozeduren aus dem Codebeispiel den fontstyle auslesen?

Bsp: Ich habe nun den Text im RTF Format mit Formatierung vorliegen. Jetzt soll der Text Zeile für Zeile abgearbeitet werden und der Schriftstyle z.B. fett, kursiv, untersttichen, normal jeder einzelnen Zeile ermittelt werden.

Zum Beispiel in etwa so:


Delphi-Quelltext
1:
2:
3:
4:
For i := 0 to Richedit1.lines.count-1 do
    begin
       printer.canvas.font.style := Richedit1.lines[i].Font.Style;
    end;


KLAR ist hier, dass  Richedit1.lines[i].Font.Style; NICHT funktioniert. Aber ich hoffe ihr wisst nun, was ich in etwa meine und könnt mir weiterhelfen