Ampelsteuerung

Hallo !

Ich habe auf einem Formular 3 Bildboxen angeordnet für 3 Ampeln. Beim Start habe ich eine Startzeit und frage in einer Schleife eine Variable ab, die sich aus "Time - Startzeit = " ergibt. Dementsprechend verändert sich die Farbe der Ampel 1. Die Ampel 2 oder/und 3 möchte ich irgendwann einschalten und sie sollten die Schleife dann auch durchlaufen (aber unabhängig voneinander). Das Problem ist, das die Ampel 2und 3 aber erst reagieren wenn die Schleife die erste Ampel komplett abgearbeitet hat. Habe ich nun die erste Schleife zu einer Endschlosschleife gemacht, dann reagieren die anderen Ampeln gar nicht (logisch) und außerdem kann ich dann das Programm nicht anhalten (außer ich würde eine Do Loop Schleife machen) ? oder gibts einen besseren Weg ? Hab mir schon die Augen ausgeGOOGLEt, aber nichts gefunden.
Danke im voraus
Marcus

Hallo Marcus,

ja, es gibt einen viel besseren Weg, das Timer-Steuerelement.
Dort stellst Du den Interval ein, wann etwas passieren soll und in der Zwischenzeit hat Dein Programm Pause. Du mußt nur für jede Ampel ein eigenes Steuerelement nehmen und Dein Problem ist gelöst.
Wenn ich Dir ein Beispiel mailen soll, sag’s.

Gruß, Rainer

Hallo Rainer!

Ein Beispiel wäre nett. Wobei ich sagen muß, daß ich ein Timer - Steuerelement schon verwende aber nur eines und den Intervall hatte ich auf 1000 gestellt. Ich dachte, wenn ich mehrere Timer - Steuerelemente benutze wird mein Programm vieleicht in der Geschwindigkeit stark eingeschränkt.

Danke Marcus

Hallo,

Ein Beispiel wäre nett.

OK, mach ich gleich mal.

Wobei ich sagen muß, daß ich ein Timer

  • Steuerelement schon verwende

Na prima, dann reicht es ja, wenn ich den Code hier poste, das bekommst Du dann schon selbst auf die Form.

aber nur eines und den
Intervall hatte ich auf 1000 gestellt. Ich dachte, wenn ich
mehrere Timer - Steuerelemente benutze wird mein Programm
vieleicht in der Geschwindigkeit stark eingeschränkt.

Nein, das bremst gar nicht, während der Timer wartet, wird fast keine Rechenzeit berbraucht.

Gruß, Rainer

Hallo Marcus,

fertig. Nicht besonders elegant, aber übersichtlich, das war im Moment wichtiger. Du brauchst mehrere Shapes.
Jeweils ein Shape als ‚Ampelkasten‘ und runde Shapes für die Gläser.
Da verwendest Du Steuerelementefelder. Für Ampel1 sind das Shape2(0) bis Shape2(2), Füe Ampel2 die Shapes ‚Shape4()‘ und für die dritte Shape6().
Dann noch drei Timer, Timer1, Timer2 und Timer3.
dann fügst Du den Code ein …

Option Explicit

Private Sub Form\_Load()
 Timer1.Interval = 1000
 Timer2.Interval = 1300
 Timer3.Interval = 1600

 Shape2(0).BackColor = RGB(180, 0, 0)
 Shape2(1).BackColor = RGB(180, 180, 0)
 Shape2(2).BackColor = RGB(0, 180, 0)

 Shape4(0).BackColor = RGB(180, 0, 0)
 Shape4(1).BackColor = RGB(180, 180, 0)
 Shape4(2).BackColor = RGB(0, 180, 0)

 Shape6(0).BackColor = RGB(180, 0, 0)
 Shape6(1).BackColor = RGB(180, 180, 0)
 Shape6(2).BackColor = RGB(0, 180, 0)
End Sub

Private Sub Timer1\_Timer()
 Static n As Byte
 n = n + 1
 If n = 4 Then n = 1
 Select Case n
 Case 1
 Shape2(0).BackColor = RGB(255, 32, 32)
 Shape2(1).BackColor = RGB(180, 180, 0)
 Shape2(2).BackColor = RGB(0, 180, 0)
 Case 2
 Shape2(0).BackColor = RGB(180, 0, 0)
 Shape2(1).BackColor = RGB(255, 255, 0)
 Shape2(2).BackColor = RGB(0, 180, 0)
 Case 3
 Shape2(0).BackColor = RGB(180, 0, 0)
 Shape2(1).BackColor = RGB(180, 180, 0)
 Shape2(2).BackColor = RGB(0, 255, 0)
 End Select
End Sub

Private Sub Timer2\_Timer()
 Static n As Byte
 n = n + 1
 If n = 4 Then n = 1
 Select Case n
 Case 1
 Shape4(0).BackColor = RGB(255, 32, 32)
 Shape4(1).BackColor = RGB(180, 180, 0)
 Shape4(2).BackColor = RGB(0, 180, 0)
 Case 2
 Shape4(0).BackColor = RGB(180, 0, 0)
 Shape4(1).BackColor = RGB(255, 255, 0)
 Shape4(2).BackColor = RGB(0, 180, 0)
 Case 3
 Shape4(0).BackColor = RGB(180, 0, 0)
 Shape4(1).BackColor = RGB(180, 180, 0)
 Shape4(2).BackColor = RGB(0, 255, 0)
 End Select
End Sub

Private Sub Timer3\_Timer()
 Static n As Byte
 n = n + 1
 If n = 4 Then n = 1
 Select Case n
 Case 1
 Shape6(0).BackColor = RGB(255, 32, 32)
 Shape6(1).BackColor = RGB(180, 180, 0)
 Shape6(2).BackColor = RGB(0, 180, 0)
 Case 2
 Shape6(0).BackColor = RGB(180, 0, 0)
 Shape6(1).BackColor = RGB(255, 255, 0)
 Shape6(2).BackColor = RGB(0, 180, 0)
 Case 3
 Shape6(0).BackColor = RGB(180, 0, 0)
 Shape6(1).BackColor = RGB(180, 180, 0)
 Shape6(2).BackColor = RGB(0, 255, 0)
 End Select
End Sub

und freust Dich über die hübsche Ampel. :smile:

Wenn Du Fragen zum Code hast, her damit.

Gruß, Rainer

Hallo!

Danke erst mal für die schnelle Antwort. Werde es gleich mal ausprobieren. Sollten noch fragen offen sein melde ich mich.
Aber ich denke es sieht sehr logisch aus und nachvollziehbar für mich.

Danke nochmals Marcus