Delphi: Timer in Timer: Extraverzögerung

...komplette Frage anzeigen

2 Antworten

Du kannst in dem Eventhandler vom ersten Timer den 2. auslösen indem du diesen auf enabled=TRUE setzt.

Du kannst das aber auch mit einem Timer erledigen, indem du das Intervall des Timers immer entsprechend anpasst.

gruss, dj

Das kann man mit einem Zähler (counter) und Bedingungen im OnTimer Event lösen. Den Timer auf 1000ms Intervall setzen, so dass jede Sekunde das OnTime Event getriggert wird. Der Counter kommt in die private Deklaration im Formular. z.B:

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
  private
    counter  : integer;
  public
    { Public-Deklarationen }
  end;

Diesen dann im OnCreate Event des Formulars mit 0 initialisieren:

procedure TForm1.FormCreate(Sender: TObject);
begin
  self.counter := 0;
end; 

Im OnTime Event werden nun Abschnitte definiert , in denen die Ampel in Äbhängigkeit vom Counter eine bestimmte Phase anzeigen soll. Ich hab das jetzt mal Quick&Dirty so formuliert:

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  // Wenn counter kleiner gleich 10 Sekunden...
  if self.counter <= 10 then
  begin
    // ... zeige Grün
  end;

  // Wenn counter größer als 10, aber kleiner gleich 13 Sekunden...
  if (self.counter > 10) AND (self.counter <= 13) then
  begin
    // ..zeige Gelb
  end;

  // Wenn counter größer als 13, aber kleiner gleich 30 Sekunden...
  if (self.counter > 13) AND (self.counter <= 30) then
  begin
    // ..zeige Rot
  end;

  // Wenn counter größer als 30, aber kleiner gleich 33 Sekunden...
  if (self.counter > 30) AND (self.counter <= 33) then
  begin
    // ..zeige Rot/Gelb
  end;

  // Wenn counter größer als 33
  if (self.counter > 33) then
  begin
    // .. Counter zurück auf 0 setzen
    self.counter := 0;
  end;

  // Counter um 1 erhöhen
  Inc(self.counter);
end;

Ich hoffe du hast das Prinzip verstanden.

Gruß

Was möchtest Du wissen?