Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Frage zu TRichEdit (https://www.delphipraxis.net/147784-frage-zu-trichedit.html)

DelTurbo 16. Feb 2010 11:34


Frage zu TRichEdit
 
Hi,

ich habe so ca. alle 30 Stunden einen fehler, der mit mad meldet.

exception class : EOutOfResources
exception message : Fehler bei Einfgen von RichEdit-Zeile.

Nu zu meiner frage. Ist die anzahl der zeilen irgendwie begrentzt? Ich habe pro RichEdit eine History von 500 zeilen. Da die history auf 500 zeilen beschränkt ist kann ich leider nicht sehen ob eine zeile fehlt und wo.

Danke im Voraus

Blackheart 16. Feb 2010 12:02

Re: Frage zu TRichEdit
 
Schau mal hier

DelTurbo 16. Feb 2010 12:07

Re: Frage zu TRichEdit
 
Super, vielen dank. Das mit den 64k wusste ich garnicht.

himitsu 16. Feb 2010 12:16

Re: Frage zu TRichEdit
 
Das ist wohl noch eine Sicherheitsbegrenzung des alten RichEdit-Controls, welches für bestimmte Adressierungen nur ein Word verwendete.

DelTurbo 17. Feb 2010 11:02

Re: Frage zu TRichEdit
 
Rückmeldung: Fehler tritt nun nichtmehr auf. Danke

Schwedenbitter 27. Aug 2010 14:17

AW: Re: Frage zu TRichEdit
 
Hallo,

ich greife das Thema/die Frage mal wieder auf:
Ich benutze in einer Chat-Anwendung ein TRichEdit als Protokoll bzw. Verlauf. Beim Start des Programms lade ich den Text mit LoadFromFile(); - beim Beenden speichere ich ihn mit SaveToFile();. Das funktioniert ganz gut.
In extrem unregelmäßigen Abständen macht das aber Probleme, ohne dass ich den Hintergrund herausfinden kann. Diese äußern sich so, dass im TRichEdit nach dem Laden die Formatierungen als Klartext mit angezeigt werden. Außerdem entarten teilweise die Dateien. Der Rekord einer rtf-Datei lag mal bei 185 MB. Das Programm ließ sich nicht mehr starten und brauchte nach Ewigkeiten 200 MB RAM. Ich brauchte dann ewig, um hinter die Riesendatei als Problemverursacher zu kommen. Wie sie aber zustande kommt, kann ich nicht rekapitulieren.

Meine Vermutung ist nun nach längeren Recherchen, dass es an der 64KB-Grenze liegen könnte und ich habe meinen Code bereits entsprechend der Hinweise hier angepasst.

Meine Frage ist da aber noch, wie kann ich ermitteln, ob ich mich der 64KB-Grenze nähere?

Ich möchte das wissen, damit ich dann drangehen und mir diese Dateien und die künftigen Starts ansehen zu kann. Irgendwann möchte ich den Fehler bzw. dessen Ursache mal finden und ich kann nicht auf allen Rechnern Delphi zum Debuggen in der IDE installieren.:wink:

Gruß, Alex

p80286 27. Aug 2010 17:14

AW: Frage zu TRichEdit
 
Zitat:

Note:
In code, you can set the value of the Text property to a value that has a length greater than the value specified by the MaxLength property. This property only affects text entered into the control at run time.

Warum auch immer MS diese 64k(?) Beschränkung eingeführt hat, sie greift wohl nur bei der Eingabe über die Oberfläche/Keyboard.

Ich habe mehre Dateien mit mehr als 64k Dateigröße eingelesen, das hat immer funktioniert. Aber es stimmt, manchmal funktioniert die Erkennung der Steuercodes nicht. Habe mich aber nicht näher damit auseinander gesetzt, da ich auch ein Word auf meinem Rechner habe und das hat keine Probleme damit.

Gruß
K-H

Schwedenbitter 29. Aug 2010 09:22

AW: Frage zu TRichEdit
 
Zitat:

Zitat von p80286 (Beitrag 1045579)
Warum auch immer MS diese 64k(?) Beschränkung eingeführt hat, sie greift wohl nur bei der Eingabe über die Oberfläche/Keyboard.

Ich habe mehre Dateien mit mehr als 64k Dateigröße eingelesen, das hat immer funktioniert.

Das deckt sich mit meiner Feststellung, dass ich mit dem TRichEdit 185 MB große Dateien laden kann, hilft mir aber nicht bei der Problemlösung. Ich versuche eben zu ergründen, warum eine Datei gerade noch nur z.B. 78 KB groß war und plötzlich beim Speichern 185 MB groß wird.
Zudem ist mein TRichEdit ReadOnly. Denn es ist ein Verlauf, den der Benutzer eben nicht verändern können soll; jedenfalls nicht mit meinem Programm. Es wird daher nichts über die Tastatur, sondern immer nur über
Delphi-Quellcode:
With RichEdit1 Do
  SelStart:=Length(Text);
  Selattributes.Style:=[fsBold];
  SelText:='Sie schrieben am ... an ...';
  Lines.Append('');
  SelStart:=Length(Text);
  SelAttributes.Style:=[];
  SelText:='Das war/ist Ihr Text.';
  Perform(EM_SCROLLCARET, 0, 0);
End;
etwas hinzugefügt.

Daher nochmal meine Frage:
Wie bestimme ich, wieviel von den 64 KB ein TRichEdit gerade verbraucht? Begründung siehe oben.

Danke und Gruß, Alex

himitsu 29. Aug 2010 09:52

AW: Frage zu TRichEdit
 
Delphi-Quellcode:
//if Length(RichEdit1.Text) >= 65536 div SizeOf(Char) then ...
if Length(RichEdit1.Text) >= 32768 then ...

oder

if Length(RichEdit1.Lines.Text) >= 32768 then ...
jenachdem wo die Format-Informationen mit enthalten sind.

Man könnte auch über SeltStart oder über GetTextLength arbeiten, oder über die entsprechende SendMessage-Message dafür.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz