Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Edit-Felder bei jedem Schleifendurchlauf aktualisieren (https://www.delphipraxis.net/8917-edit-felder-bei-jedem-schleifendurchlauf-aktualisieren.html)

johny 15. Sep 2003 13:30


Edit-Felder bei jedem Schleifendurchlauf aktualisieren
 
Hallo,

vielleicht kann mir hier jemand weiterhelfen. Ich habe ein Problem mit Schleifen mal zu folgendem Beispiel vereinfacht:

Auf einer Form sind
- ein Button
- zwei Edit-Felder
- ein GaugeBar

Klickt man auf den Button, werden die Schleifen ausgeführt und in den Edit-Felder sollen die Variablen iCount1 und iCount2 angezeigt werden.
Desweiteren wird der Wert der while-Schleife noch durch ein GaugeBar angezeigt.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
 iCount1 : integer; // Counter für die for-Schleife
 iCount2 : integer; // Counter für die while-Schleife
begin
 iCount2 := 0;
 for iCount1 := 0 to 10 do
 begin
 Edit2.Text := IntToStr(iCount1); // Zahl der for-Schleife in Edit2 anzeigen
  while iCount2 < 5 do
  begin
   Edit1.Text := IntToStr(iCount2); // Zahl der while-Schleife in Edit1 anzeigen
   Gauge1.Progress := iCount2; // Gleichzeitig durch Gauge visualisieren
   iCount2 := iCount2+1; // Counter erhöhen
   sleep(250); // Warten, so dass man auch was sieht ;)
  end;
 end;
end;
Der GaugeBar wird bei jedem Schleifendurchlauf aktualisiert, so dass der Balken richtig angezeigt wird, sich also ständig erhöht. Die Einträge der Edit -Felder werden aber erst dann angezeigt, wenn alle Schleifen fertig durchlaufen sind, so dass zum Zeitpunkt des Durchlaufs nichts angezeigt wird, dann erscheint die letzte Zahl.

Ist es möglich, die aktuellen Werte der Edit-Felder sofort anzuzeigen, so dass in diesen hochgezählt wird?

Luckie 15. Sep 2003 13:37

Re: Edit-Felder bei jedem Schleifendurchlauf aktualisieren
 
Setz in die inner Schleife mal ein Application.processmessages. Du mußt deinem Fenster auch die Chance geben sich zu aktualisieren.

Nalincah 15. Sep 2003 13:37

Re: Edit-Felder bei jedem Schleifendurchlauf aktualisieren
 
Probiers mal mit

Delphi-Quellcode:
Application.ProcessMessages

roderich 15. Sep 2003 13:54

Re: Edit-Felder bei jedem Schleifendurchlauf aktualisieren
 
Ich würde nicht Application.ProcessMessages verwenden, wenn es auch anders geht. Schließlich wird jede Benutzer-Interaktion (z.B. Alt+F4) bei einem ProcessMessages verarbeitet, was Dein Programm total durcheinanderbringen kann.

Was spricht stattdessen gegen ein simples Edit.Repaint ?

Roderich

Luckie 15. Sep 2003 13:59

Re: Edit-Felder bei jedem Schleifendurchlauf aktualisieren
 
Ich schon. Wenn das Fenster zwischenzeitlich überdenkt wird, werden nur die Edits neugezeichnet, verschieben und so weiter läßt es sich mit deiner Methode auch nicht mehr. Spielt allerdings nur eine Rolle, wenn die Schleife länger braucht. Das mit den Benutzereingaben muß er eben entsprechend verhindern.

johny 15. Sep 2003 14:28

Re: Edit-Felder bei jedem Schleifendurchlauf aktualisieren
 
Klasse, Application.ProcessMessages und Edit.Repaint funktionieren wunderbar. Jetzt muss ich nur noch schauen, was besser geeignet ist. Die Vor- und Nachteile habt ihr ja schon angesprochen.

Vielen Dank, für die Hilfe!

Schwedenbitter 2. Feb 2004 08:53

Re: Edit-Felder bei jedem Schleifendurchlauf aktualisieren
 
Soweit klar!:-D
Die Frage, welche sich mir jetzt stellt ist aber noch:
Wie kann man es erreichen, daß die Aktualisierung auch von statten geht, während das Fenster verschoben wird oder man während bzw. nach dem Verschieben noch die Maustaste gedrückt hält.
Bei mir ist es bislang so, daß zwar das Fenster schön aktualisiert wird, aber während der Verschiebens usw. eben nicht mehr. :gruebel:

Luckie 2. Feb 2004 09:54

Re: Edit-Felder bei jedem Schleifendurchlauf aktualisieren
 
Logisch. Dein Programm kann auch nur wie du eine Sache auf einmal machen. Und wärend du verschiebst, kann es eben die Schleife nicht weiter ausführen, weil ja wegen Application.Processmessages alle Nachrchiten verabreitet werden. Willst du dein gewünschtes Verhalten erreichen, musst du die Schleife in einen Thread packen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:53 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