Einzelnen Beitrag anzeigen

Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#11

Re: Einfache Ampelsimulation funktioniert nicht...

  Alt 28. Mai 2007, 15:24
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 ...
  Mit Zitat antworten Zitat