Okay ... @deepdragon:
1. Nach RotGelb kommt grün. Zumindest in Deutschland an der Ampel.
Delphi-Quellcode:
else if IAmpelrotgelb.Visible then
begin
IAmpelaus.Visible := false;
IAmpelrot.Visible := false;
IAmpelrotgelb.Visible := false;
IAmpelgruen.Visible := false;
IAmpelgelb.Visible := true;
Timer1.Interval := 1000;
end
2. Zwei ifs mit der gleichen Bedingung ??
Delphi-Quellcode:
else if IAmpelgelb.Visible then
begin
IAmpelgelb.Visible := false;
IAmpelgruen.Visible := false;
IAmpelaus.Visible := false;
IAmpelrotgelb.Visible := false;
IAmpelrot.Visible := true;
Timer1.Interval := 4000;
end
...
else if IAmpelgelb.Visible then
begin
IAmpelaus.Visible := false;
IAmpelgelb.Visible := false;
IAmpelrot.Visible := false;
IAmpelrotgelb.Visible := false;
IAmpelgruen.Visible := true;
Timer1.Interval := 4000;
end
end;
Das zweite wird nie angesprungen
drittens: Mein Tipp
Wenn schon nicht richtig mit Klassen und Co. (was wohl ne Nummer zu groß ist) dann mach ne Prozedur und nen enum-Typ, also sowas:
Delphi-Quellcode:
TLights = (Green, Yellow, Red);
TAmpelState = set of TLights;
const
StateGreen: TAmpelState = [Green];
...
procedure SetAmpelState (newState: TAmpelState)
begin
GreenLight.Visible := Green in newState;
etc.
end;
...
SetAmpelState([Red, Yellow]);
SetAmpelState(StateGreen);
Sollte so oder so ähnlich gehen (mehrere Wege) und ist sauberer - trennt die Anzeigelogik von der Steuerungslogik
@RedBox ^^ : So wie Robert es geschrieben hat gehts natürlich auch, aber ich wollte noch das Problem aufzeigen und so ...