Ich wuerde erst mal den Ansatz ueberarbeiten. Eine Ampel ist ein Zustandsautomat.
Delphi-Quellcode:
type
TAmpelZustaende =
(azRot, azRotGelb, azGruen, azGelb);
Durch diese Zustaende rotiert die Ampel einfach.
Delphi-Quellcode:
procedure TForm1.TAmpelTimer(Sender: TObject);
begin
// den Zustand fortschalten
if AmpelZustand = azGelb then
AmpelZustand := azRot
else
Inc(AmpelZustand);
Jetzt kann man vom Zustand die Darstellung ableiten.
Delphi-Quellcode:
// den neuen Zustand darstellen
case AmpelZustand of
azRot:
begin
IRot.Visible := True;
IGelb.Visible := False;
IGruen.Visible := False;
end;
azRotGelb:
begin
IRot.Visible := True;
IGelb.Visible := True;
IGruen.Visible := False;
end;
azGruen:
begin
IRot.Visible := False;
IGelb.Visible := False;
IGruen.Visible := True;
end;
azGelb:
begin
IRot.Visible := False;
IGelb.Visible := True;
IGruen.Visible := False;
end;
end;
Das wichtigste dabei ist das immer die Darstellung dem Zustand des Programmes nachgeordnet ist. Das gilt fuer jedes vernuenftige Programm.