Autor Beitrag
judomichi
Hält's aus hier
Beiträge: 12



BeitragVerfasst: So 27.02.11 13:28 
So, noch keine 2 Stunden Mitglied (und 2 Stunden die Suche bemüht und Threads gelesen) und schon wieder eine Frage.

Nachdem ich das mit dem Kreis (nach dem Denkanstoss mit dem Shape) hinbekommen habe und meine Ampelschaltung funzt, möchte ich jetzt den nächsten Schritt machen:

Wenn die Ampel grün ist und auf gelb zurückspringt soll das gelb blinken. Die Schaltung mache ich jedesmal wenn ich einen Button drücke; also ohne Timer. Dabei frage ich den Zustand der Ampel ab.
Also: Wenn Gelb = true dann gelb := blinken und raus und auf nächsten Tastendruck warten.

Ist das verständlich?

Den Zustand frage ich ab:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
// flag
// 1= rot
// 3 = gelb
// 4 = rot/gelb
// 5 = grueb


case flag of
   1:    begin;
            v_rot();
            v_gelb();
            v_gruen_del();
            h_rot_del();
            h_gelb();
            h_gruen_del();
            flag := 4;
         end;
   3:    begin;
            v_rot();
            v_gelb_del();
            v_gruen_del();
            h_rot_del();
            h_gelb_del();
            h_gruen();
            flag := 1;
         end;
   4:    begin;
            v_rot_del();
            v_gelb_del();
            v_gruen();
            h_rot();
            h_gelb_del();
            h_gruen_del();
            flag := 5;
         end;
   5:    begin;              hier muss das blinken hin
            v_rot_del();
            v_gelb();
            v_gruen_del();
            h_rot();
            h_gelb();
            h_gruen_del();
            flag := 3;
         end;
   else  begin
            v_rot();
            v_gelb_del();
            v_gruen_del();
            h_gruen();
            h_rot_del();
            h_gelb_del();
            flag := 1;
         end;
end;


Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 27.02.11 13:32 
Das Stichwort hast du schon selbst genannt:
Ein Timer ;-)

Darin kannst du dann jeweils nach dem festgelegten Intervall die Farbe umschalten. Soll es nicht mehr blinken, schaltest du den Timer wieder ab.
judomichi Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: So 27.02.11 13:41 
Also, eines ist mir klar:

Wenn ich die gelbe Apel setze schalte ich den Timer an. Damit verbunden soll die gelbe Ampel dann blinken. Wenn der Anwender jetzt wieder den Button "Schalten" drückt soll die Ampel auf rot springen und gelb wird unsichtbar.

Aber wie erreiche ich das das Shape für gelb z.B. für eine halbe sek an und dann für eine halbe sek aus ist bis zum nächste buttonklick?
die halbe sek über timer on/timer off???

Sorry, aber soweit bin ich noch nicht.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 27.02.11 13:57 
Du musst den Timer nur einmal anschalten und das Intervall auf 500 Millisekunden gestellt haben, dann kannst du im Timer einfach umschalten:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
if MyShape.Color = clYellow then
  MyShape.Color := clBlack
else
  MyShape.Color := clYellow;
Wobei es natürlich sauberer ist auch diesen Status extern zu speichern.
KleinesPferd
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 29



BeitragVerfasst: So 27.02.11 14:15 
user profile iconjudomichi hat folgendes geschrieben Zum zitierten Posting springen:
Also, eines ist mir klar:

Wenn ich die gelbe Apel setze schalte ich den Timer an. Damit verbunden soll die gelbe Ampel dann blinken. Wenn der Anwender jetzt wieder den Button "Schalten" drückt soll die Ampel auf rot springen und gelb wird unsichtbar.

Aber wie erreiche ich das das Shape für gelb z.B. für eine halbe sek an und dann für eine halbe sek aus ist bis zum nächste buttonklick?
die halbe sek über timer on/timer off???

Sorry, aber soweit bin ich noch nicht.


ausblenden Delphi-Quelltext
1:
2:
Timer1.Interval:=500;  //Interval entspricht Millisekunden, 1000 = 1 Sekunde
Timer1.enable:=true;


ausblenden Delphi-Quelltext
1:
2:
3:
4:
Procedure TForm1.YellowButton1CLick(Sender:TObject);
begin
Timer1.enable:=true; //false für ausschalten, 'Gelb' aber noch definiert ausschalten
end;



Grüße
judomichi Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: So 27.02.11 16:50 
jaenicke, kleines Pferd,

jetzt ist die Verwirrung groß! Danke erst einmal für Eure Hilfe.

Vielleicht ist die blinkende Ampel noch ein bischen zu viel für meine 4 Stunden Delphi Schulung.

Wenn ich es recht verstanden habe muss ich doch eine Schleife haben, in der ich immer "gelb an" - "gelb-aus" durchlaufe. Aber dann komme ich doch nicht aus der Schleife raus, da das Blinklicht ja erst ausgehen soll wenn ich die nächste Ampelphase (rot) schalte.

Mein Verständnis:

IST-Code

Letzte Phase war grün
Neue Phase ist gelb, also Rot und Grün ausschalten und Gelb anschalten sowie status "Gelb ist an" setzen
Fertig

Schaltbutton drücken

letzte Phase war gelb
neue Phase ist rot
...

SOLL-Code

Letzte Phase war grün
Neue Phase ist gelb, also Rot und Grün ausschalten und Gelb anschalten sowie status "Gelb ist an" setzen
blinken lassen
Fertig

Schaltbutton drücken (gelb blinkt immer noch)

letzte Phase war gelb
neue Phase ist rot, also rot an, gelb und grün aus.
...

In meinem Source in Zeile 36, da soll gelb gesetzt werden und blinken. Dann ist die Prozedur durchlaufen und wartet auf Button2 Klick. Dann geht es mit Zeile 18 weiter ...
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: So 27.02.11 17:09 
in h_gelb() Gelb setzen und den Timer anschalten, in h_gelb_del() den Timer abschalten und Gelb auf schwarz setzen....

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
judomichi Threadstarter
Hält's aus hier
Beiträge: 12



BeitragVerfasst: So 27.02.11 17:17 
Danke an Euch alle. Manchmal findet man den Wald vor Bäumen nicht. Irgendwo in einem Thread habe ich diesen beiläufigen Satz gefunden:

OnTimer-Ereignis deine Bewegung programmieren.

Das habe ich ausprobiert und es funzt!

Timer auf false
Bei Gelb Timer auf true
On timer ereignis: die If abfrage wie oben beschrieben
bei Rot Timer auf false

Danke, danke, danke!!! Mal sehen wann das nächste Problem kommt.