Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Richedit zeigt plötzlich die Steuerzeichen an
Tranx - Fr 31.05.13 12:26
Titel: Richedit zeigt plötzlich die Steuerzeichen an
Ich habe seit Neuestem einen sehr merkwürdigen Effekt.
Beim ersten Laden einer .rtf-Datei in eine TRichedit-Komponente werden alle Steuerzeichen als Text (wohl das Textformat, siehe unterhalb) angezeigt.
Anzeige beim ersten Mal im TRichedit:
{\rtf1\ansi\ansicpg1252\uc1\deff0\stshfdbch14\stshfloch0\stshfhich0\stshfbi0\deflang1031\deflangfe2052{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
{\f14\froman\fcharset136\fprq2{\*\panose 02020300000000000000}PMingLiU{\*\falt \'b7\'73\'b2\'d3\'a9\'fa\'c5\'e9};}{\f224\fswiss\fcharset128\fprq2{\*\panose 020b0600070205080204}MS PGothic;}
{\f225\fswiss\fcharset128\fprq2{\*\panose 020b0600070205080204}@MS PGothic;}{\f248\froman\fcharset136\fprq2{\*\panose 02020300000000000000}@PMingLiU;}{\f278\froman\fcharset238\fprq2 Times New Roman CE;}{\f279\froman\fcharset204\fprq2 Times New Roman Cyr;}.....
Beim zweiten Mal wird der Text richtig dargestellt.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| procedure TMF.mi_InfoClick(Sender: TObject); var lsDN: string; begin lsDN := gsAnwPfad + 'Dokumente\RTF\Infos' + gsVersionsNr + '.rtf'; if FileExists(lsDN) then begin re_Infos.PlainText := FALSE; re_Infos.Lines.Clear; re_Infos.Lines.LoadFromFile(lsDN); re_Infos.Lines.LoadFromFile(lsDN); end else Fehler('Die Infodatei ' + lsDN + ' ist nicht vorhanden.'); end; |
re_Infos : TRichedit-Komponente,
gsAnwPfad: Globale Variable, die den Anwendungspfad festlegt, kann auch durch ParamStr(0) ersetzt werden, da ich jedoch auch Testmodi ermögliche, mit verschiedenen Anwendungspfaden habe ich das über eine Globalvariable gelöst
gsVersionsNr: Globale Variable der Versionsnummer
Fehler: Fehlerausgabe-Dialog
Was könnte der Grund für dieses Verhalten sein?
Ich habe es durch die doppelte Ladung des Textes (siehe oben) gelöst, doch wüsste ich gerne, was der Grund ist. Das Ganze passiert nur beim ersten Mal! Der zweite Aufruf der Routine erzeugt das richtige Bild des Textes auch wenn ich nur einmal die LoadfromFile-Routine in der Routine habe. Ob Plaintext False oder True ist, ist egal. Gibt es irgendeine Eigenschaft, die das Verhalten steuert, die nach dem ersten Aufruf erst gesetzt wird?
Vielen Dank im Voraus,
Gunther
WasWeißDennIch - Fr 31.05.13 12:50
Den Grund kann ich Dir auch nicht nennen, aber wie sieht es aus, wenn Du das mal so probierst?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| if FileExists(lsDN) then begin re_Infos.Lines.BeginUpdate; try re_Infos.PlainText := FALSE; re_Infos.Lines.LoadFromFile(lsDN); finally re_Infos.Lines.EndUpdate; end; end |
Hast Du das Phänomen bei jeder RTF-Datei, oder nur bei dieser? Kannst Du ggf. mal ein Beispiel anhängen, dann kann ich das bei Misserfolg zu Hause selbst einmal mit Delphi 5 ausprobieren?
Tranx - Fr 31.05.13 14:02
Danke für den Hinweis. Ich habe mal die alte Info-Datei geladen, die funktioniert mit Deinen Befehlen problemlos. Die aktuelle Info-Datei funktioniert beim ersten Mal nicht. Das wird immer komischer. Ich habe beide Dateien mit Word-XP erstzellt und als .rtf abgespeichert. Auch mit Wordpad das gleiche.
Sehr merkwürdig. Muss wohl sicherheitshalber die doppelte Laderei machen.
Hochhaus - Fr 31.05.13 15:45
Tranx hat folgendes geschrieben : |
Sehr merkwürdig. Muss wohl sicherheitshalber die doppelte Laderei machen. |
Hast Du es auf einer anderen Maschine schon versucht ? Möglicherweise ist bei einem so komischen Fehlverhalten die Installation von Windows nicht mehr optimal.
WasWeißDennIch - Fr 31.05.13 15:54
Du könntest auch die "fehlerhafte" Info-Datei hier hochladen, falls die nicht streng geheim ist. Möglicherweise sieht ja dann jemand, was die Ursache sein könnte.
Hochhaus - Fr 31.05.13 15:55
Eine sehr gute Idee !! Ich habe einen Texteditor mit dem RichEdit geschrieben.
jaenicke - Fr 31.05.13 15:58
Lass mal das Clear weg... beim Laden ist der alte Inhalt ja eh weg. TRichEdit hat mit leeren Textfeldern unter ganz bestimmten Umständen Probleme, das habe ich hier mal gemeldet:
http://qc.embarcadero.com/wc/qcmain.aspx?d=105991
Das Problem war da zwar ein anderes, aber vielleicht ist das ja etwas ähnliches...
Hochhaus - Fr 31.05.13 16:10
Das Problem mit dem RichEdit hatte ich unter Delphi XE2 - soweit ich mich erinnern kann - unter Delphi 6 PE aber nicht.
Hochhaus
jaenicke - Fr 31.05.13 16:33
Stimmt, hier gehts ja vermutlich um Delphi 5... da gab es noch kein Unicode, deshalb ist das dort exakt der hier zutage tretende Effekt, nämlich dass die RTF-Formatierung sichtbar wird. Das von mir beschriebene Problem zeigt sich ja nur so, weil diese Ansizeichen dann als Unicodezeichen interpretiert chinesische Zeichen ergeben.
Ich gehe deshalb davon aus, dass das leere Feld in der Tat damit zu tun hat...
// EDIT:
Genau das Problem aus der QC hat aber zumindest Delphi 7 nicht.
Tranx - Sa 01.06.13 05:54
Jaenicke, leider kann das mit dem Clear nicht sein. Klar, das kann ich weglassen. Ich habe die gleiche Prozedur mit einer anderen .rtf-Datei versucht. Dort klappt es. Mit Clear. Nur die letzt erzeugt, die ich aus der davor erzeugten durch Einfügung von Text abgespeichert habe, macht den Mist. Aber auch nur beim ersten Mal. Das ist es, was mich so wundert. Der zweite Aufruf, die selbe Routine, keine Probleme. Alle weiteren auch nicht, nur beim ersten Aufruf gibt es Probleme. Aber da mit dem anderen Betriebssystem/Rechner will ich mal versuchen.
Edit: Habe ich mit meinem Windows-7-Rechner zuhause versucht. Das Gleiche. Es muss an der Datei liegen. Aber - wie gesagt - beim zweiten Mal geht es immer.
Tranx - Sa 01.06.13 06:03
WasWeißDennIch hat folgendes geschrieben : |
Hast Du das Phänomen bei jeder RTF-Datei, oder nur bei dieser? Kannst Du ggf. mal ein Beispiel anhängen, dann kann ich das bei Misserfolg zu Hause selbst einmal mit Delphi 5 ausprobieren? |
Das mit dem Hochladen habe ich erledigt. Siehe meinen vorigen Beitrag. Nö, ist bloß eine Infodatei, in der Änderungen des Programms aufgelistet werden.
Mathematiker - Sa 01.06.13 08:02
Hallo,
ich habe einmal mit meinem Delphi 5 Deine rtf-Datei probiert und bei mir geschieht das Gleiche. Erst beim 2.Laden wird korrekt angezeigt.
Da ich keine Ahnung habe, woran so etwas liegen kann, habe ich weiter experimentiert und andere TRichEdit-Komponenten versucht. TntRichedit macht es ebenso falsch.
Warum aber TRxRichEdit (
http://sourceforge.net/projects/rxlib/) sofort Deinen Text korrekt(!) anzeigt, ist mir einfach ein Rätsel. Das hilft Dir nicht weiter, aber vielleicht kennt jemand den Hauptunterschied von TRichedit und TRxRichedit und kann so die Ursache für das merkwürdige Verhalten nennen. :nixweiss:
Beste Grüße
Mathematiker
jaenicke - Sa 01.06.13 08:16
Mathematiker hat folgendes geschrieben : |
| Warum aber TRxRichEdit (http://sourceforge.net/projects/rxlib/) sofort Deinen Text korrekt(!) anzeigt, ist mir einfach ein Rätsel. Das hilft Dir nicht weiter, aber vielleicht kennt jemand den Hauptunterschied von TRichedit und TRxRichedit und kann so die Ursache für das merkwürdige Verhalten nennen. :nixweiss: |
Es gibt mehrere Versionen des Richedit Controls. Delphi benutzt noch eine sehr alte Version, vermutlich wird da eine neuere benutzt.
Wie dem auch sei, setze einfach MaxLength von re_Infos auf einen hohen Wert vor dem Laden, dann klappt es auch. (Getestet mit XE, wo das Problem auch das gleiche ist.) Das Problem ist hier rein die Dateigröße wie ich mit ein wenig experimentieren gesehen habe.
Hochhaus - Sa 01.06.13 09:02
Wenn die Eigenschaft "PlainText" auf True gesetzt ist, tritt dieses Problem auch bei mir auf. Sobald die Eigemschaft geändert wird, ist das Problem weg.
Grüsse
Hochhaus
Tranx - Sa 01.06.13 09:46
jaenicke hat folgendes geschrieben : |
Wie dem auch sei, setze einfach MaxLength von re_Infos auf einen hohen Wert vor dem Laden, dann klappt es auch. (Getestet mit XE, wo das Problem auch das gleiche ist.) Das Problem ist hier rein die Dateigröße wie ich mit ein wenig experimentieren gesehen habe. |
Danke, das hat geholfen. Mit dem Befehl:
Delphi-Quelltext
1:
| re_Infos.MaxLength := 2 SHL 20; |
damit klappt es!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!