Einzelnen Beitrag anzeigen

Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.337 Beiträge
 
Delphi 11 Alexandria
 
#12

Re: Problem mit Speicher und Handle

  Alt 4. Mär 2010, 16:39
Hallo Armin,

danke für Deinen Hinweis! Hat mir gerade sehr gehofen.
Von mir noch eine Anmerkung:

Ich habe Datenobjekte erstellt, die grötenteils aus mehreren Panels und Labels bestehen und Datenbankinhalte darstellen.
Darüber hinaus gibt es Listenobjekte (von der Scrollbox abgeleitet), die Mengen von Datenkomponenten anzeigen und in Spalten und/oder Zeilen anordnen.
Die Listenobjekte können auch ihre eigene Größe anpassen, um den Inhalt möglichst komplett anzuzeigen.
Jeder Eintrag in einer Listenkomponente kann selbst wieder Datenmengen anzeigen und seine Größe selbst danach ausrichten.
(Im Bild werden die Runden untereinander angeordnet und beinhalten wiederum Spiele, die dann in Spalten und notfalls in mehreren Zeilen angeordnet werden.)

Da sind natürlich jede Menge Objekte verbraten und die Ausrichtung aller Datenkomponenten dauert etwas.
Nun hatte ich immer mal sporadisch den o.g. Handle-Fehler.

Dank Deinem Hinweis bin ich dem etwas näher auf die Schliche gekommen:
Wenn der Aufbau der Runden (im Bild) fertig war (Benutzerobjekte=2500), konnte ich "vorsichtig" durch die Runden scrollen. Das heisst, "Stück für Stück" - ein Stückchen scrollen, dann alles schön fertig zeichnen lassen, wieder ein Stückchen scrollen... Soweit kein Problem.
Wenn ich aber die Scrollbar voll "durchgezogen" habe, wurde alles normal gezeichnet, die Benutzerobjekte stiegen danach aber kontinuierlich immer weiter bis 10.000 und dann kam der Fehler.

Ich habe mir jetzt so beholfen, dass ich in der Listenkomponente (wenn eine verschachtelte Höhenanpassung erfolgen muss) jeden neuen Eintrag sofort zeichnen lasse.
Delphi-Quellcode:
if (ItemCreateFlag) and (ItemsAutoHeight or ItemsAutoWidth) then
begin
  ScrollInView(dcPanel);
  Application.ProcessMessages; // nur dieses allein half nicht
end;
Das hat zwar zur Folge, dass der Aufbau einer neuen Listenkomponente (bzw. neuen Inhalten) etwas unruhiger ist, aber der Fehler wird so vermieden.
Scheinbar verzettelt sich Windows, wenn wenn es später Komponenten darstellen soll, mit denen es sich noch nicht richtig auskennt

Zwei Fragen:
1) Kann man die Anzahl der verbrauchten Benutzerobjekte im eigenen Programm ermitteln?
2) Hat jemand eine Idee für eine bessere Alternative zu dem ScrollInView?


Stahli
Miniaturansicht angehängter Grafiken
benutzerobjekte_162.png  
  Mit Zitat antworten Zitat