![]() |
Mehrere RTF-Dateien in ein RichEdit laden (unten anhängen)
Hallo,
wie einige sicher wissen, hatte ich mit dem Speichern von RTF-Dateien in eine XML-Datei Probleme. Die Steuerzeichen der RTF (wegen der Formatierung) haben sich mit XML nicht vertragen, sodass es immer entweder zu Parser-Problemen in der XML oder zu Einlese-Problemen in das RichEdit kam. Das konnte ich nun mit großer Hilfe einiger bemühter User hier lösen. Und zwar wird dafür ein StringStream benutzt, der die RTF einliest. Um sie im RichEdit korrekt darzustellen (so meine Erfahrung), muss über die Funktion
Delphi-Quellcode:
geladen werden und die RTF wird angezeigt.
Lines.Add.LoadFromStream
Nur folgendes Problem. Wenn ich in den StringStream mehrere RTF-Dateien einlese und dann so ins RichEdit kopiere, zeigt er mir immer nur die erste Datei an, obwohl der StringStream nachweislich alle Dateien beinhaltet und die Größe des Streams wächst. Wenn ich die Position des StringStreams auf das Ende einer RTF-Datei setze und ab da alles bis zum Ende kopiere, zeigt er mir nicht mehr die erste RTF-Datei an, sondern die nächste bis zu deren Ende. Ich vermute, dass es am Schluss ein Steuerzeichen gibt, was entweder dem StringStream oder der RichEdit eine Art "Stopp-Anweisung" gibt, sodass ich nicht so einfach mehrere RTFs in einem RichEdit untereinander anzeigen lassen kann. Wie kann ich das umgehen? Ich bedanke mich - wie immer - im Voraus PS: Den anderen Beitrag ( ![]() |
Re: Mehrere RTF-Dateien in ein RichEdit laden (unten anhänge
Hallo,
tut mir leid, das wird erheblich aufwändiger und ist keinesfalls mit ein paar String-Operationen oder Manipulationen der Lines- oder Text-Eigenschaft zu erledigen. Ein RTF-Text besteht aus '{' <header> <document> '}'. Du müsstest also sicherstellen, dass sich die header-Bereiche nicht widersprechen. Es gibt Möglichkeiten, innerhalb eines Textes mehrere document-Bereiche zu verknüpfen. Aber dazu musst Du die einzelnen Dateien zunächst analysieren. Siehe z.B. ![]() Jürgen |
Re: Mehrere RTF-Dateien in ein RichEdit laden (unten anhänge
Zitat:
Eine Quick & Dirty Lösung wäre die Verwendung der Zwischenablage. - das aber nur der Vollständigkeit halber, manchmal ist Q&D ja auch gut genug :) Eventuell weitere hilfreiche Informationen gibt es hier: ![]() Zitat:
|
Re: Mehrere RTF-Dateien in ein RichEdit laden (unten anhänge
Hallo,
Q&D wäre ja - in diesem Fall - auch ok. Ist nicht so DAS Projekt ;) Meinst du also, dass ich den Inhalt der RTFs in die Zwischenablage kopiere und von dort aus in das eigentliche RichEdit. Stimmt's? Also nacheinander und einfach anhängen? Was die Message angeht: Das hab ich nicht ganz verstanden. Hab es mir in der MSDN angeschaut. Kannst du mir was dazu erklären? |
Re: Mehrere RTF-Dateien in ein RichEdit laden (unten anhänge
Zitat:
Zitat:
![]() Dort ist auch kompletter Source Code zu finden, der EM_STREAMIN verwendet - jedoch nicht von mir getestet. Cheers, |
Re: Mehrere RTF-Dateien in ein RichEdit laden (unten anhänge
Wow vielen Dank.
Werde beides mal probieren. Allerdings muss ich jetzt ein bissl renovieren *gr* ;) Danke |
Re: Mehrere RTF-Dateien in ein RichEdit laden (unten anhänge
Zitat:
Genau dies klappt bei mir leider nicht oder ich bekomme es nicht hin. Ich arbeite mit Delphi5 unter Windows95 - mein Programm soll später allerdings unter WindowsXP laufen. Ich möchte gerne den Text einer Datei kontinuierlich einlesen. Die Datei selbst ist ein Logfile eines PC-Spieles mit speziellen Formatierungen (Escape-Sequenzen) für Farben etc. Dafür habe ich ein eigenes TConversion erstellt, das auch prima funktioniert - beim ersten Öffnen der Datei. Mithilfe eines Timers überprüfe ich dann die Dateilänge und möchte eben, sobald das PC-Spiel wieder etwas in den Logfile geschrieben hat, die neuen Zeilen an meine RTF-Datei auf dem Bildschirm einfach unten anhängen, aber das bekomme ich irgendwie nicht hin. Verwende ich richedit.lines.loadfromstream (diese Prozedur sendet ja eine EM_STREAMIN-Message), dann wird der neue Text nicht angehängt, sondern er ersetzt den vorher eingelesenen. Ich denke, es gibt die Möglichkeit, die Datei in einem zweiten RichEdit zu öffnen, die hinzu gekommenen Zeilen ins Clipboard zu kopieren und dann in das ursprünglich RichEdit zu übertragen (das hab ich noch nicht ausprobiert). Aber es muss doch auch anders gehen, nach der Aussage von mjustin. Oder ist es nicht möglich, direkt aus dem Logfile in das Richedit einzulesen? Muss ich erst die neuen Zeilen in ein zweites Richedit einlesen, dann in einem Stream ablegen und danach diesen Stream in das alte Richedit lesen? Das wäre ja so ähnlich wie über das Clipboard. Auch so hab ich es noch nicht ausprobiert. Meine Befürchtung dabei ist nämlich, dass auch in diesem Fall der Text nicht angehängt wird, sondern den bereits bestehenden ersetzt, wenn ich mit richedit.lines.loadfromstream einlese. Ich sehe auch keinen großen Sinn darin, eine eigene loadfromstream-Methode zu programmieren, weil ich nicht wüsste, welche Änderungen ich gegenüber der in Delphi bereits vorhandenen machen müsste, um ein anderes Ergebnis zu erzielen. Wie kann ich die Aufgabe lösen, die neuen Zeilen einfach an den bestehenden Text anzuhängen? |
Re: Mehrere RTF-Dateien in ein RichEdit laden (unten anhänge
Hallo mani64,
das .LoadfromFile liest ja eine vollständige Datei ein und "überschreibt" vorhandene Daten. Wenn Du nur die letzten x Zeilen dazu addieren willst, solltest Du mit .Lines.Addstrings arbeiten. Gruß K-H |
Re: Mehrere RTF-Dateien in ein RichEdit laden (unten anhänge
Hallo,
ja, das scheint wohl so zu sein. Ich verwende zwar loadfromstream, aber die Prozedur wird ja von loadfromfile auch aufgerufen. Allerdings wird in dem von mjustin angeführten Link was anderes behauptet, nämlich es sei möglich, statt über das Clipboard auch über einen MemoryStream und mit loadfromstream Text in eine bestehende Datei einzufügen. Jedoch klappt es auch mit Add oder AddStrings nicht. Zwar wird der Text eingefügt, aber ohne jede Formatierung. Bliebe letztendlich doch nur die Möglichkeit mit dem Clipboard. Edit: Es funktioniert tatsächlich! Die Routine unter diesem Link ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz