Autor |
Beitrag |
Tranx
      
Beiträge: 648
Erhaltene Danke: 85
WIN 2000, WIN XP
D5 Prof
|
Verfasst: Fr 31.05.13 13:26
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
_________________ Toleranz ist eine Grundvoraussetzung für das Leben.
|
|
WasWeißDennIch
      
Beiträge: 653
Erhaltene Danke: 160
|
Verfasst: Fr 31.05.13 13: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?
Für diesen Beitrag haben gedankt: Tranx
|
|
Tranx 
      
Beiträge: 648
Erhaltene Danke: 85
WIN 2000, WIN XP
D5 Prof
|
Verfasst: Fr 31.05.13 15: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.
_________________ Toleranz ist eine Grundvoraussetzung für das Leben.
|
|
Hochhaus
      
Beiträge: 662
Erhaltene Danke: 8
Windows 7
Delphi XE2
|
Verfasst: Fr 31.05.13 16: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.
Für diesen Beitrag haben gedankt: Tranx
|
|
WasWeißDennIch
      
Beiträge: 653
Erhaltene Danke: 160
|
Verfasst: Fr 31.05.13 16: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
      
Beiträge: 662
Erhaltene Danke: 8
Windows 7
Delphi XE2
|
Verfasst: Fr 31.05.13 16:55
Eine sehr gute Idee !! Ich habe einen Texteditor mit dem RichEdit geschrieben.
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 31.05.13 16: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:
qc.embarcadero.com/wc/qcmain.aspx?d=105991
Das Problem war da zwar ein anderes, aber vielleicht ist das ja etwas ähnliches...
Für diesen Beitrag haben gedankt: Tranx
|
|
Hochhaus
      
Beiträge: 662
Erhaltene Danke: 8
Windows 7
Delphi XE2
|
Verfasst: Fr 31.05.13 17:10
Das Problem mit dem RichEdit hatte ich unter Delphi XE2 - soweit ich mich erinnern kann - unter Delphi 6 PE aber nicht.
Hochhaus
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 31.05.13 17: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 
      
Beiträge: 648
Erhaltene Danke: 85
WIN 2000, WIN XP
D5 Prof
|
Verfasst: Sa 01.06.13 06: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.
Einloggen, um Attachments anzusehen!
_________________ Toleranz ist eine Grundvoraussetzung für das Leben.
|
|
Tranx 
      
Beiträge: 648
Erhaltene Danke: 85
WIN 2000, WIN XP
D5 Prof
|
Verfasst: Sa 01.06.13 07: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.
_________________ Toleranz ist eine Grundvoraussetzung für das Leben.
|
|
Mathematiker
      
Beiträge: 2622
Erhaltene Danke: 1447
Win 7, 8.1, 10
Delphi 5, 7, 10.1
|
Verfasst: Sa 01.06.13 09: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 ( 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.
Beste Grüße
Mathematiker
_________________ Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 01.06.13 09:16
Mathematiker hat folgendes geschrieben : | Warum aber TRxRichEdit (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. |
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.
Für diesen Beitrag haben gedankt: Tranx
|
|
Hochhaus
      
Beiträge: 662
Erhaltene Danke: 8
Windows 7
Delphi XE2
|
Verfasst: Sa 01.06.13 10: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 
      
Beiträge: 648
Erhaltene Danke: 85
WIN 2000, WIN XP
D5 Prof
|
Verfasst: Sa 01.06.13 10:46
_________________ Toleranz ist eine Grundvoraussetzung für das Leben.
|
|