Entwickler-Ecke

Sonstiges (Delphi) - TRichEdit nach Word übertragen


jasocul - Mi 13.02.13 09:48
Titel: TRichEdit nach Word übertragen
Ich habe mehrere TRichEdit, die ich gerne nach MS-Word (Version 2003) übertragen möchte.
Die Schweizer [http://www.swissdelphicenter.ch/de/showcode.php?id=2060] haben ja was nettes in ihrer Bibliothek. Allerdings funktioniert es bei mir nicht wir gewünscht und ich kann mir im Moment nicht erklären, woran das liegt.

Inhalt im RichEdit:

Quelltext
1:
2:
3:
4:
5:
Anfang des freien Textbereichs

Hallo Welt.

Ende des freien Textbereichs.

In Word kommt dann folgendes an:

Quelltext
1:
2:
A_n_f_a_n_g_ _d_e_s_ _f_r_e_i_e_n_ 
_T_e_x_t_b_e_r_e_i_c_h_s_____H_a_l_l_o_ _W


Hat jemand eine Idee, wie ich das korrigieren kann (außer neu tippen :mrgreen: )
Da die Anwendung von "normalen" Usern bedient werden soll, möchte ich auch die Zwischenablage nicht verwenden. Manuelles kopieren durch den Anwender ist auch nicht sinnvoll (15 TRichEdit).


Narses - Mi 13.02.13 10:19

Moin!

Das sieht auf den ersten Blick aus wie eine ANSI-API, der du Unicode "zu fressen" gegeben hast... :lupe: Sonst fällt mir da auch nix ein. :nixweiss:

cu
Narses


jasocul - Mi 13.02.13 10:23

Die Vermutung liegt nah.
Ich habe jetzt mal den Text aus anderen Komponenten auf diesem Weg übertragen. Das Phänomen ist für alle getesteten Komponenten identisch.

Da die Win-Api nicht mein Spezialgebiet ist, wäre ich für einen Lösungsvorschlag dankbar.


Narses - Mi 13.02.13 11:37

Moin!

Hast du den Schweizer-Code c&p genommen? Was passiert, wenn du das hier änderst?

Delphi-Quelltext
1:
procedure WriteToMSWord(const RTFText: AnsiString);                    
:nixweiss:

cu
Narses


WasWeißDennIch - Mi 13.02.13 11:45

Dann musst Du aber auch das hier ändern:

Delphi-Quelltext
1:
CopyMemory(PGlobal,PAnsiChar(RTFText),Length(RTFText)+1);                    


jasocul - Mi 13.02.13 12:20

Diese Änderungen habe ich inzwischen auch ausprobiert.
Der Text wird dadurch vollständig übergeben, allerdings sind alle Formatierungen weg.

Und Nein, ich habe PlainText nicht auf True gesetzt. :wink:

Zum Spaß habe ich mal den Text in einer Datei gespeichert und in einem TMemo wieder geladen. Danach diesen Text an die Methode übergeben. Ergebnis: Ja, so soll es aussehen.

Es scheint also so, dass das TRichEdit den Text nicht mit Formatierung übergibt. Jetzt muss ich mir noch eine schicke Lösung überlegen, damit es dann so funktioniert, wie ich es brauche.

Für schicke Vorschläge bin ich offen.


Narses - Mi 13.02.13 12:48

Moin!

user profile iconjasocul hat folgendes geschrieben Zum zitierten Posting springen:
Es scheint also so, dass das TRichEdit den Text nicht mit Formatierung übergibt.
Das könnte aber auch beim Cast auf AnsiString passiert sein, würde ich jedenfalls nicht sofort ausschließen. :idea:

Wäre es nicht "besser" nach einer Unicode-API/Version für diese Funktion zu suchen? :nixweiss:

cu
Narses


Martok - Mi 13.02.13 13:19

Wo bekommst du den Text her? Aus RichEdit.Text?

IIRC sind da die Formatierungen nicht dabei. Du könntest das RichEdit in einen TStringStream speichern und dessen DataString verwenden.


jasocul - Mi 13.02.13 13:59

@Narses:
Das habe ich geprüft. Die Formatierungen werden in der Eigenschaft "Text" nicht mit übergeben, wie Martok sich schon richtig erinnert hat.

Ich habe jetzt auch geplant, das über einen Stream zu lösen. Scheint für mich der einfachste Weg zu sein.

Danke für eure Hilfe.