Wenn man jede Ampel für sich betrachtet, dann kann man diese zusammenfassen (ich habe jetzt ganz bewusst keine Ampelklasse angelegt, die natürlich noch besser wäre) und für die Steuerung (im Timer) erheblich leichter ansprechen.
Beispielhaft habe ich nur eine Ampel angelegt, die anderen können quasi per CopyPaste erstellt werden.
Delphi-Quellcode:
type
TForm1 = class( TForm )
Ampel1_Rot_Image : TImage;
Ampel1_Gelb_Image : TImage;
Ampel1_Gruen_Image : TImage;
Timer1 : TTimer;
procedure Timer1Timer( Sender : TObject );
private
FAmpel1_Status : Integer;
public
procedure Ampel1_SetStatus( Status : Integer );
function Ampel1_GetStatus : Integer;
end;
var
Form1 : TForm1;
implementation
{$R *.dfm}
{ TForm1 }
function TForm1.Ampel1_GetStatus : Integer;
begin
Result := FAmpel1_Status;
end;
procedure TForm1.Ampel1_SetStatus( Status : Integer );
begin
FAmpel1_Status := Status;
case Status of
0 : // aus
begin
Ampel1_Rot_Image.Visible := False;
Ampel1_Gelb_Image.Visible := False;
Ampel1_Gruen_Image.Visible := False;
end;
1 : // rot
begin
Ampel1_Rot_Image.Visible := True;
Ampel1_Gelb_Image.Visible := False;
Ampel1_Gruen_Image.Visible := False;
end;
2 : // rot-gelb
begin
Ampel1_Rot_Image.Visible := True;
Ampel1_Gelb_Image.Visible := True;
Ampel1_Gruen_Image.Visible := False;
end;
3 : // grün
begin
Ampel1_Rot_Image.Visible := False;
Ampel1_Gelb_Image.Visible := False;
Ampel1_Gruen_Image.Visible := True;
end;
4 : // gelb
begin
Ampel1_Rot_Image.Visible := False;
Ampel1_Gelb_Image.Visible := True;
Ampel1_Gruen_Image.Visible := False;
end;
end;
end;
procedure TForm1.Timer1Timer( Sender : TObject );
var
LStatusNeu : Integer;
begin
LStatusNeu := Ampel1_GetStatus;
if LStatusNeu = 4
then
LStatusNeu := 1
else
LStatusNeu := LStatusNeu + 1;
Ampel1_SetStatus( LStatusNeu );
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ea 0a 4c 14 0d b6 3a a4 c1 c5 b9
dc 90 9d f0 e9 de 13 da 60)