Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - probleme mit repeatschleife
klausiemausie - Mi 04.02.09 21:24
Titel: probleme mit repeatschleife
ich hab folgenden code bei mir eingebaut
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| repeat begin angriff:=angriff-10; edit1.Text:=floattostr(angriff); verteidigung:=verteidigung-10; edit2.Text:=floattostr(verteidigung); sleep(1000); end; until (angriff<0) or (verteidigung<0); |
delphi soll quasi die variable angriff immer um 10 verringern, den neuen wert ins edit1 schreiben, das selbe mit verteidigung und edit2, und das solange, bis ein wert unter 0 kommt. es funktioniert auch, er ist irgendwann fertig, aber er zeigt mir die zwischenzahlen nicht in im editfeld an, woran könnte das liegen?
Moderiert von
Narses: Delphi-Tags hinzugefügt
jaenicke - Mi 04.02.09 21:33
Das liegt daran, dass Sleep den Hauptthread lahm legt und einfach keine Verarbeitung der Repaintnachrichten passiert.
Du solltest statt Sleep dieses Delay benutzen:
http://www.delphipraxis.net/topic7355_delay+revisited.html
Und wenn du (z.B. in einer Schleife, dann aber am besten nicht bei jedem Durchlauf) einmal visuelle Komponenten aktualisieren willst, dann kannst du das mit Application.ProcessMessages / Komponente.Repaint machen. Das passiert hier aber in dem Delay schon. Wobei Application.Processmessages auch dafür sorgt, dass deine Anwendung noch auf Eingaben reagiert.
Dafür musst du aber dafür sorgen, dass man durch das Klicken von anderen Befehlen während der Schleife dein Programm nicht durcheinanderbringt. ;-)
klausiemausie - Mi 04.02.09 21:44
gut und soll ich anstelle von sleep einfaach delay schreiben? oder wie baue ich die delayprozedu in mein prog ein?
Delete - Mi 04.02.09 21:46
Kopier Dir den Quellcode und füge ihn in die aufrufende Unit ein.
jaenicke - Mi 04.02.09 21:47
Du kopierst den Code. :mrgreen:
Beispiele:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure Delay... begin ... end;
procedure TForm1.Button1Click(... begin Delay... end; |
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.Button1Click(...
procedure Delay... begin ... end;
begin Delay... end; |
Delete - Mi 04.02.09 21:56
Oder die elegantere Möglichkeit (im Sinne von Wiederverwendbarkeit): erstelle Dir eine neue Unit, schreib den Prozedur- bzw. Funktionskopf in den interface-Teil und den Quellcode selbst in den implementation-Teil. Künftig musst Du nur diese Unit einbinden, um Delay nutzen zu können.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!