Entwickler-Ecke
Sonstiges (Delphi) - schrittbasierter timer
dude - Sa 22.02.03 07:54
Titel: schrittbasierter timer
hi,
wie kann ich in einem Timer Quelltext den TExxt so schreiben, dass er in einem Timer-Code zuererst die erste aktion ausführt, und dann nach einer sekunde die zweite aktion. also:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure Timer1.OnTimer (...) var a : TTime b : TTime c : TTime begin a := Time; //nach einer Sekunde dann b := Time; c := b-a; Label1.caption := TimeToStr(c); end; |
Anonymous - Sa 22.02.03 09:34
Versuch mal mit Sleep(Millisekunden);
Delete - Sa 22.02.03 09:49
Hat der Timer ein 1sec-Intervall? Dann hätte ich eine globale Variable genommen, diese anfangs auf Null gesetzt und bei jedem "OnTimer" um Eins erhöht und dann den passenden Code ausgeführt (case).
sleep blockiert das Programm nur unnötigerweise.
dude - Sa 22.02.03 10:44
also das mit sleep(1000) funktioniert super. Bloss ist sleep ja eher ein befehl der das system auf sleep stellt. d.h. man kann dann die form nicht verschieben oder benutzen.
und das mit der globalen variable...kannst du mir da mal ein beispiel geben anhand meines beispieles oben ?Der Timer hat ein 1000 Interval (1grobe Sekunde)
Ich hatte das so mla ausprobiert. Funktionieren tut das aber nicht!
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| procedure TForm1.Timer1Timer(Sender: TObject); var i : Integer; a : TTIme; b : TTIme; c : TTIme; begin if i = 1 then begin b := Time; c := b - a; label1.Caption := TimeToStr(c); i := 0; end; if i = 0 then begin; a := time; i := 1; end; end; |
Fred Ferkel - Sa 22.02.03 11:34
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| var form1:Tform1; warteauftimer:integer=1;
implementation
procedure TForm1.Timer1Timer(Sender: TObject); var a : TTIme; b : TTIme; c : TTIme; begin if WarteAufTimer = 1 then begin b := Time; c := b - a; label1.Caption := TimeToStr(c); WarteAufTimer := 0; end; if WarteAufTimer = 0 then begin; a := time; i := 1; end; |
cya
Delete - Sa 22.02.03 12:25
| dude hat folgendes geschrieben: |
| Ich hatte das so mla ausprobiert. Funktionieren tut das aber nicht! |
Eine globale Variable wird
außerhalb der Prozedur deklariert und kann mit einem bestimmten Wert initialisiert werden (wie auch Fred zeigte). Eine lokale Variable, wie in deinem Codebeispiel, wird bei jedem Aufruf der Funktion/Prozedur neu erstellt. - Ich dachte an so was:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| var curAction : integer = 0;
procedure TForm1.Timer1Timer(Sender: TObject); begin inc(curAction);
case curAction of 1: MachDies; 2: MachDas; 3: MachWasGanzAnderes; { ... } end; end; |
Du müsstest nur dafür sorgen, dass irgendwann der Timer gestoppt bzw. die Variable wieder auf Null zurückgesetzt wird. Sonst wird sie endlos hochgezählt, führt aber irgendwann keine passenden Aktionen mehr aus.
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!