Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Problem mit sleep()


Waldkauz - Fr 27.03.09 18:15
Titel: Problem mit sleep()
Hallo!

Also, ich bastle gerade an einem StadtLandFluss-Spiel (ist keine Hausaufgabe sondern eine Art Projekt, wo Schüler ihre eigenen Programme entwerfen).
Während eine Uhr in einem Edit-Feld 120 Sekunden herunterzählt, hat kann man in die Edit-Felder wo man Stadt, Land, Fluss etc. reinschreibt, etwas reinschreiben - das funktioniert schonmal.
Ich möchte aber einen zusätzlichen Button machen, auf den man klicken kann, während die Zeit läuft, und der dann den Countdown sozusagen anhält.
Mit sleep ist das ja aber problematisch, weil man da ja, während der sleepfunktion keine Buttons betätigen kann.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.Button1Click(Sender: TObject);    //das ist der Button der den Countdown einschaltet
var
  I: Integer;
begin
  for I := 12000 downto 20 do
  begin
    sleep(10);
    Application.ProcessMessages;
    Edit7.Text:=intToStr(Round(I/100));
  end;
end;


Gibt es andere Zeit-Funktionen?


JayEff - Fr 27.03.09 18:25

:puke: Sleep :mrgreen:
Sleep ist für so ein Anwendungsgebiet gänzlich ungeeignet.
Schau dir mal TTimer an, such auch im Forum ein bisschen danach. Diese Komponente löst ihr Ereignis onTimer immer wieder auf, mit *myTimer.Interval* Milisekunden Abstand. Für dein Anwendungsgebiet: Interval auf 1000 ms stellen (=1 Sekunde) und im onTimer Ereignis herunterzählen. Mit myTimer.Enabled := True/False kannst du entscheiden, ob der Countdown laufen soll oder nicht.


Delete - Fr 27.03.09 18:25

Bnutze einen Timer und eine globale Variable für die vergangenen Sekunden.


Waldkauz - Fr 27.03.09 19:54

Hey danke!
Is genau das, was ich brauchte.