Autor Beitrag
dude
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 48



BeitragVerfasst: Sa 22.02.03 07:54 
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:

ausblenden 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;
Popov
Gast
Erhaltene Danke: 1



BeitragVerfasst: Sa 22.02.03 09:34 
Versuch mal mit Sleep(Millisekunden);
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 48



BeitragVerfasst: 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!
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 87



BeitragVerfasst: Sa 22.02.03 11:34 
ausblenden 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
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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:
ausblenden 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.