diese Frage habe ich schon mal gestellt, bis jetzt konnte mir jedoch
niemand helfen. Deshalb nochmal:
Ich möchte einen sich nur geringfügig ändernden RTF Text in meinem
Programm anzeigen. Dazu lade ich den RTF-Header aus einer Datei in eine
StringList. Anschließend wird der Text mit RTF-Steuerzeichen der
StringList hinzugefügt.
Etwa so:
list1.loadfromfile('header');
list1.add('par/ Datum '+Datumsstring);
Wenn ich diese StringListe nun in die RichEdit Komponente lade (z.b. mit
assign) wird nur der Quelltext angezeigt und nicht der Formatierte Text.
Wenn ich jedoch den Text abspeichere und neu lade (mit
savetofile/loadfromfile ) wird er korrekt angezeigt.
Für eine Lösung wie direkt der Formatierte Text angezeigt wird wäre ich
sehr dankbar.
Wenn jedoch keiner eine Möglichkeit kennt wäre ich auch für einen
alternativ Vorschlag sehr dankbar.
Gruß
Thomas Bost ( uf...@rz.uni-karlsruhe.de )
Zur Erinnerung: Das hier ist eine Newsgroup, in der Beitraege, dazu
zaehlen natuerlich auch Fragen, veroeffentlicht werden koennen. Diese
Beitraege werden zu den unterschiedlichsten Zeiten von anderen gelesen.
Wann und ob ueberhaupt jemand den Beitrag liest und dazu eine Anwort
geben kann oder will, ist unbestimmt. Es hat also keinen Sinn
Dringlichkeitsvermerke oder gar Antwortfristen in einen Beitrag oder
dessen Ueberschrift zu schreiben.
> Ich möchte einen sich nur geringfügig ändernden RTF Text in meinem
> Programm anzeigen. Dazu lade ich den RTF-Header aus einer Datei in
> eine StringList. Anschließend wird der Text mit RTF-Steuerzeichen der
> StringList hinzugefügt.
> Etwa so:
>
> list1.loadfromfile('header');
> list1.add('par/ Datum '+Datumsstring);
>
> Wenn ich diese StringListe nun in die RichEdit Komponente lade (z.b.
> mit assign) wird nur der Quelltext angezeigt und nicht der Formatierte
> Text.
> Wenn ich jedoch den Text abspeichere und neu lade (mit
> savetofile/loadfromfile ) wird er korrekt angezeigt.
> Für eine Lösung wie direkt der Formatierte Text angezeigt wird wäre
> ich sehr dankbar.
> Wenn jedoch keiner eine Möglichkeit kennt wäre ich auch für einen
> alternativ Vorschlag sehr dankbar.
Speichere doch mal den Text im RichEdit nach dem Hinzufuegen des Textes
aus der StringListe ab und schau ihn als Plaintext an (z.B. mit NotePad)
Bei meinem Versuchen wurden die Backslashes, die die RTF-Befehle
einleiteten, um einen zweiten Backslash ergaenzt. D.h. der
Befehls-Backslash wird ebenso wie der darauf folgende Befehlsname als
"normaler Text" eingefuegt. Bleibt also nur der Umweg so wie du ihn oben
schon beschrieben hast.
Soweit mir bekannt ist, gibt es keine Moeglichkeit mittels der
RichEdit-Komponente und ohne irgendwelche Windows-API-Aufrufe
RTF-Befehle zu Fuss einzufuegen. Die einzige Moeglichkeit Text in
RichEdit zu formatieren geht ueber DefAttributes usw. (und das schoepft
die Moeglichkeiten von RTF ja bei weitem nicht aus.)
Ich nehme aber mal an, dass schon mal jemand eine Komponente geschrieben
hat, die das kann. (siehe DelphiSuperPage usw.)
Felix
Und ob!
Piotr
> > Ich möchte einen sich nur geringfügig ändernden RTF Text in meinem
> > Programm anzeigen. Dazu lade ich den RTF-Header aus einer Datei in
> > eine StringList. Anschließend wird der Text mit RTF-Steuerzeichen der
> > StringList hinzugefügt.
> > Etwa so:
> >
> > list1.loadfromfile('header');
> > list1.add('par/ Datum '+Datumsstring);
> >
Du kannst den formatierten RichEdit nur per load/save übertragen. Lines und
text ist die Ascii-Version des textes, also ohne Steuerzeichen. Wenn Du also
per lines.add etc. ein RTF-Kommando einfügen möchtest, wird dieses halt genau
so angezeigt.
Meine Lösung dafür ist:
procedure UpdateRichEdit(str : TStrings; edit : TRichEdit);
var stream : TMemoryStream;
begin
stream := TMemoryStream.Create;
str.SaveToStream(stream);
stream.position := 0;
edit.lines.LoadFromStream(stream);
stream.free;
end;
so long
Thomas.
---------------------------
Hyperjumps im Delphi source?
home.t-online.de/home/0406314556-001/index.htm
-----== Posted via Deja News, The Leader in Internet Discussion ==-----
http://www.dejanews.com/ Now offering spam-free web-based newsreading
Es war sicher nicht meine Absicht jemand unter Druck zu setzen. Ein
Dringend im Betreff ist auch nichts so ungewöhnliches (kommt auch in
dieser Newsgroup vor), und spiegelte leider meine Situation wieder.
Diese heftige Reaktion hat mich wirklich überrascht, und ist mir auch
unverständlich. Insbesondere habe ich nirgens eine Antwortfrist
gefordert. Wenn ich jedoch falsch verstanden wurde tut es mir wirklich
leid, und ich möchte mich entschuldigen.
Übrigens bin ich sehr Dankbar für deinen Versuch mir zu helfen.
Gruß
Thomas Bost < uf...@rz.uni-karlsruhe.de >
> Du kannst den formatierten RichEdit nur per load/save übertragen. Lines und
> text ist die Ascii-Version des textes, also ohne Steuerzeichen. Wenn Du also
> per lines.add etc. ein RTF-Kommando einfügen möchtest, wird dieses halt genau
> so angezeigt.
>
> Meine Lösung dafür ist:
>
> procedure UpdateRichEdit(str : TStrings; edit : TRichEdit);
> var stream : TMemoryStream;
> begin
> stream := TMemoryStream.Create;
> str.SaveToStream(stream);
> stream.position := 0;
> edit.lines.LoadFromStream(stream);
> stream.free;
> end;
Vielen Dank für die Lösung, genau so etwas schwebte mir vor.
Ich habe es selbst auch schon mit Streams probiert bin jedoch
wohl aufgrund meiner Unfähigkeit gescheitert.
Gruß
Thomas Bost < uf...@rz.uni-karlsruhe.de >
thomas....@hamburg.netsurf.de schrieb in Nachricht
<6hkpq2$465$1...@nnrp1.dejanews.com>...
>
>> > Ich möchte einen sich nur geringfügig ändernden RTF Text in meinem
>> > Programm anzeigen. Dazu lade ich den RTF-Header aus einer Datei in
>> > eine StringList. Anschließend wird der Text mit RTF-Steuerzeichen der
>> > StringList hinzugefügt.
>> > Etwa so:
>> >
>> > list1.loadfromfile('header');
>> > list1.add('par/ Datum '+Datumsstring);
^^^^^^^^^^^^^^
hier liegt der Fehler !!
>
>Du kannst den formatierten RichEdit nur per load/save übertragen. Lines und
>text ist die Ascii-Version des textes, also ohne Steuerzeichen. Wenn Du
also
>per lines.add etc. ein RTF-Kommando einfügen möchtest, wird dieses halt
genau
>so angezeigt.
>
>Meine Lösung dafür ist:
>
Halli Hallo !
Ihr habe beide recht. Teilweise. In die StringList wird tatsächlich die
reine ASCII-Representation des RTF-Textes gelesen. Fügt mann allerdings eine
Zeichenkette wie "\par " hinzu, so wird der aktuelle Absatz beendet. Wichtig
ist dabei, daß man darauf achtet, daß RTF-Control-Codes mit einem BACKSLASH
beginnen. Im Beispiel oben wurde ein SLASH benutzt. Will man den
Datumsstring und die Zeichenkette "Datum :" in eine alleinstehende Zeile
einfügen, so macht man das am besten so :
list1.add(#13 + #10 + '\par ' + 'Datum : ' + Datumsstring + #10 +#13 +
'\par ');
auf diese Weise kann man sich komplette RTF-Files per Hand zusammenbauen.
Ich verwende diese Methode, um RTF-Files als, von der Textverarbeitung
unabhängige, Formatvorlagen zu erstellen. Dabei ist es möglich, fast alle
denkbaren Formatierungen per Hand auszuführen. Allerdings würde das jetzt zu
weit führen. Die aktuelle RTF-Spezifikation ist immerhin über 60 Seiten
lang. Mir ist klar, daß es mit einer RTF-Komponente einfacher gehen würde,
aber das Projekt, bei dem ich diese Methode verwende soll (jedenfalls in der
aktuellen Version) auch noch unter Win 3.X laufen und ist darum in D1
geschrieben.
Ciao, Ralf
Nein, du nicht, aber auch das kam schon vor. und wie gesagt, es ist
reiner zufall, wann sich ein kompetenter Antwortender findet, und
demzufolge sinnlos.
Felix