Autor Beitrag
MrZBot
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: So 07.06.09 18:24 
Hallo,
Gibt es eine Möglichkeit, die Einträge einer Listbox während einer for-Schleife neu zu zeichnen?
Ich habe ein Programm, dass eine Berechnung ausführt, die relativ lange dauert. Da diese Berechnung für viele Zahlen ist, möchte ich, dass die Ergebnisse nicht erst am Ende der Schleife, sondern sofort angezeigt werden.
Ich dachte, dafür gäbe es sowas wie Listbox1.Repaint oder sowas aber das funzt nicht.

Ich möchte übrigens nicht mein ganzes Programm umschreiben, ich suche einen einzelnen Befehl wenn es sowas wie gibt...


Moderiert von user profile iconNarses: Topic aus Multimedia / Grafik verschoben am So 07.06.2009 um 23:36
oki
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 40

Win XP
Delphi 2007 Prof
BeitragVerfasst: So 07.06.09 18:28 
ausblenden Delphi-Quelltext
1:
2:
  ListBox.Refresh;
  Application.ProcessMessages;


Gruß oki

_________________
42
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: So 07.06.09 19:06 
Wärend deiner Schleife werden die Nachrichten nicht verarbeitet und die Box nicht neugezeichnet. Wieviele Schleifendurchläufe werden das? Application.ProcessMessages verlangsamt den Ablauf ein gutes Stück und das Schreiben in die Listbox noch mehr, am besten wäre es, du rufst ProcessMessages nur so alle 100-1000 mal auf (Stichwort if Zähler mod 1000 = 0 ). Noch besser wäre es, wenn du auch nur alle 100-1000 mal in die Listbox schreibst (je nach dem, wie lang deine Schleife ist), also sammle am besten die Einträge und schreibe sie dann in einem Rutsch in die Box. Experimentier damit ein bisschen, das wird auch die Geschwindigkeit etwas boosten. Ob Listbox.Refresh nötig ist, weiß ich nicht, ich vermute oki weiß schon, was er schreibt...

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
MrZBot Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: So 07.06.09 19:13 
Danke!
Leider ist mir gerade aufgefallen, dass mir das nichts bringt xD
Mein Fehler.
oki
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 40

Win XP
Delphi 2007 Prof
BeitragVerfasst: So 07.06.09 20:38 
user profile iconJayEff hat folgendes geschrieben Zum zitierten Posting springen:
... Ob Listbox.Refresh nötig ist, weiß ich nicht, ich vermute oki weiß schon, was er schreibt...

Üblicherweise sollte ein Application.ProcessMessages reichen. Da ich bei einigen Komponenten immer wieder unsicher werde, ob das auch wirklich ein Neuzeichnen durchführt hab ich es mir angewöhnt zur Sicherkeit ein Refresh auf die betreffende Komponente zu setzen.
Am einfachsten testen. Aber das war ja offensichtlich nicht MrZBot's Problem :lol:

Gruß oki

_________________
42
Regan
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2157
Erhaltene Danke: 72


Java (Eclipse), Python (Sublimetext 3)
BeitragVerfasst: So 07.06.09 20:41 
Oder nur Application.ProcessMessages(); hinschreiben. Reicht aus.
oki
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 40

Win XP
Delphi 2007 Prof
BeitragVerfasst: So 07.06.09 21:03 
user profile iconRegan hat folgendes geschrieben Zum zitierten Posting springen:
Oder nur Application.ProcessMessages(); hinschreiben. Reicht aus.


Ich denke, das war der Sinn meines letzten Beitrages.

Gruß oki

_________________
42