Delphi-PRAXiS
Seite 1 von 2  1 2      

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 TMemo (https://www.delphipraxis.net/11745-tmemo.html)

MarkusT7 13. Nov 2003 07:56


TMemo
 
Moin !

Ich hab mal ne Frage zum TMemo.

Ich verwende 2 TMemo Felder als Anzeige für eingehende Nachrichten (Länge 10 Zeichen), die ich dann auswerte und die die TMemos schreibe. Ab einer bestimmten Anzahl von Nachrichten (2000) löscht er die 100 ältesten.

Codeauszug dazu
AString:String;
myMemo1.Lines.Append(AString); // Nachricht hinzugefügt


Jetzt kommt es vor, daß die Anzeige im TMemo stehen bleibt, d.h. es werden keine neuen Nachrichten mehr hinzugefügt. Nach einem Löschvorgang läuft es dann ganz normal weiter.
Erst dachte ich, daß es mit der Speichergröße zusammenhängt (WIN 98 - 64KB), aber das Problem tritt nur sporadisch auf egal wieviel Lines ich im Memo zulasse und ist daher um so ärgerlicher.

Danke für die Hilfe !

Luckie 13. Nov 2003 14:25

Re: TMemo
 
Es lommt nicht auf die Zeilen, sondern auf die Anzahl der Zeichen an. Ein zeichen = 1 Byte.

MarkusT7 13. Nov 2003 14:45

Re: TMemo
 
Jede Nachricht hat 20 Zeichen, also umfaßt 20 Byte.
Bei einer maximalen Größe von 64 KB (65535 Byte) wären dann
rein theoretisch 3276 Nachrichten zulässig pro Memofeld.

Ich habe aber maximal 2000 Nachrichten also 40000 Byte.
Damit ist die Obergrenze nicht erreicht.
Selbst wenn noch am Ende jedes Telegramms ein CR und ein Linefeed folgt (ASCII #13,#10) liege ich innerhalb der maximal erlaubten Speichergröße.

Summe Nachrichten + Summe (CR und Linefeed)
=44000 Byte, Max. erlaubt unter Win98 (65535)

Da ich aber nicht Win98 verwende, sondern WIN2000 ist selbst diese Speichergrenze hinfällig. Da bin ich mir aber nicht sicher und nehme deswegen erstmal 65535 Byte an.

Luckie 13. Nov 2003 14:48

Re: TMemo
 
Nein, ist sie nicht. Steht MaxLenght auf 0 ist sie auch bei Win2000 auf 64 KB begrenzt, du kannst sie aber beliebig hochsetzten.

MarkusT7 13. Nov 2003 15:08

Re: TMemo
 
Damit wäre das Thema der Speicherbrenzung geklärt. Danke erstmal dafür !

Allerdings kann ich mir immer noch nicht vorstellen, warum die Aufzeichnung dann bei einer beliebigen Nachrichtenanzahl manchmal stehen bleibt.

Luckie 13. Nov 2003 15:12

Re: TMemo
 
Wie sieht der restliche Speicher deiner Anwendung aus? Wenn dein Adressraum voll ist, dann kann auch das Memo nichts mehr aufnehmen.

MarkusT7 13. Nov 2003 15:44

Re: TMemo
 
Wie bekomme ich das denn raus ?

Luckie 13. Nov 2003 15:46

Re: TMemo
 
Erstellst du Instanzen von Objekten und gibst sie nicht mehr frei? Große Arrays? Werden dynamische Arrays häufig vergrößert / verkleinert? ...

MarkusT7 14. Nov 2003 06:34

Re: TMemo
 
Nein.
Ich arbeite mit Strings.
Ich verwende nur ein dyn.Array, welches aber während der normalen Laufzeit des Programmes nicht verwendet wird. Es wird zwar beim Programmstart initialisiert, aber nur auf die Größe 1.

MarkusT7 26. Nov 2003 11:01

Re: TMemo
 
Hmmm ... seit 2 Wochen keine Antwort. Es gibt also keine Lösung für dieses Problem.

Ich habe inzischen die maximal zulässige Anzahl der eingehenden Nachrichten pro Memofeld halbiert und seit dem läuft es. Kann es sein, daß die Memofelder auf den selben Speicher zugreifen und sich die 64k teilen müssen ?


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:30 Uhr.
Seite 1 von 2  1 2      

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