Hi oOps und

im Forum!
Da ich im Moent ferien habe, habe ich sogar noch mehr als 3 min zeit. Also:
Für so ne Ampelanalge sollte man Zustände verwenden. Z.b So:
Zustand 1: Ampel rot
Zustand2: Ampel rot gelb
Z3: Ampel grün
Z4: Ampel gelb.
Normalerweise macht man dann einen Zustandsübergangsgraph, in dem geregelt wird unter welcher Bedingung welcher Zustand aufgerufen wird, bei dir gibts ja nur die Bedingung Zeit, also ist das denk ich mal nicht nötig.
Diese Zustände sollen ja nach gewisser Zeit immer wieder eintreten. Also deklarieren wir am besten mal eine Variable "z" vom Typ Integer Global unter implementation, dort merken wir uns den aktuellen Zustand der Ampel.
Delphi-Quelltext
1: 2:
| implementation var z:integer; |
Jetzt mal zum Formular, ich denke wir nehmen einfach mal ein Panel und ziehen das auf das Formular , sozusagen als Hintergrund für die Ampel.
Dann nehmen wir 3 Shapes und setzten die als Lichter der Ampel auf das erste Panel. 2 Buttons mit der caption "an" bzw. aus" und 2 labels, die uns den Zustand anzeigen und einen Timer. Ungefähr so:
Nun müssen wir noch 4 Prozeduren schreiben, die die Ampel auf die entsprechende farbe setzen.
Nennen wir sie doch ampelrot, ampelrotgelb, ampelgruen und ampelgelb.
Also:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure ampelrot; begin form1.shape1.brush.color:=clred; form1.shape2.brush.color:=clblack ; form1.shape3.brush.color:=clblack; end; |
die anderen Procedures entsprechend.
Dann gehts jetzt weiter mit der Procedure Zustandsuebergang, die wir unter der Variablendeklaration von z schreiben.
Diese regelt den Übergang von den verscheidenen Zuständen.
Also etwa so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure zustandsuebergang; begin with form1 do begin case z of 1:begin label2.caption:='Rot'; ampelrot; form1.Timer1.Interval:=5000;z:=2; end; 2:begin label2.caption:='RotGelb'; ampelrotgelb; form1.Timer1.Interval:=3000; z:=3 end; 3:begin label2.caption:='Grün'; ampelgruen; form1.Timer1.Interval:=5000 ; z:=4 end; 4:begin label2.caption:='Gelb'; ampelgelb; form1.Timer1.Interval:=3000;z:=1 end; end; end; end; |
Jetzt nur noch die Timer Komponente namens "Timer1" aufs Formular ziehen und erstmal die Eigenschaft enabled auf false setzen. Interval auf 1.
Unter der Sparte Ereignisse nen doppelklick auf "OnTimer" und einfach zwischen begin und end zustandsuebergang schreiben.
Jetzt noch die OnClick Ereignisse der Button zuweisen.
Hier vom Einschalt Button:
Delphi-Quelltext
1: 2: 3: 4:
| z:=1; timer1.Interval:=1000; timer1.enabled:=true; label2.Caption:='Ampel eingeschaltet!'; |
Und hier der ausschalt Button:
Delphi-Quelltext
1: 2: 3:
| timer1.enabled:=false; z:=2; label2.Caption:='Ampel ausgeschaltet!'; |
So, das wars, deine Ampel sollte laufen. wenn du was nicht verstehst oder ich irgendwo Mist gemacht hab, schreib einfach wieder.
Schönen Gruss
Pigface Joe