![]() |
Kreuzung - Timer funktioniert nicht
Hay!
Ich programmiere gerade eine Kreuzung. Auf dieser soll ein Auto ganz simpel fahren und bei Rot anhalten. Eigentlich kein Problem. Ich habe seit längerem nichts mehr programmiert und bin ein wenig aus der Übung. Könnte jemand von euch mir auf die Sprünge helfen und mir meinen Fehler zeigen? Ich bin momentan wohl ein wenig blind... Mit freundlichen Grüßen, Ghost
Delphi-Quellcode:
procedure TForm1.TmAmpelTimer(Sender: TObject);
begin if Ampel1Ro.Visible = True then begin Ampel1Ro.Visible:= False; Ampel1Ge.Visible:= True; end; if Ampel1Ge.Visible = True then begin Ampel1Ge.Visible:= False; Ampel1Gr.Visible:=True; end; if Ampel1Gr.Visible = True then begin Ampel1Gr.Visible:= False; Ampel1Ro.Visible:= True; end; |
Re: Kreuzung - Timer funktioniert nicht
Verrätst du uns was dich zu der Annahme treibt das ein Fehler vorliegt?
Denn ein Fehler ist ein Verhalten das eintritt, welches nach Erkenntnis des Schöpfers aber nicht eintreten soll. |
Re: Kreuzung - Timer funktioniert nicht
:D Na klar.
Also ich will ja einfach eine Kreuzung machen und habe einfach einen Timer draufgesetzt. Ich habe den vollständigen Code angegeben (den den ich auch hier geschrieben habe) und das Image1 (Ampel1Ro = Ampel1 Rot ) ist das einzigste sichtbare. Image2 (Ampel1Ge = Ampe1lGelb) und Image3 (Ampel1Gr = Ampel1Grün) sind unsichtbar. Nun soll wenn Ampel1Rot ist [,nach Ablauf des Timerintervalls (1000)] Ampel1Ro unsichtbar werden und Ampel1Ge sichtbar werden. Danach soll Ampel1Ge unsichtbar werden und Ampel1Gr sichtbar werden. Irgendwas im Code des Timers funktioniert also nicht, denn es passiert einfach nichts. Die Ampel bleibt die ganze Zeit Rot! Ich hoffe damit habe ich deine Frage beantwortet. |
Re: Kreuzung - Timer funktioniert nicht
Hallo,
ein paar Kleinigkeiten, die mit dem Problem nichts zu tun haben. Überprüfe nie auf "true", auch wenn es in dem Fall geht. Schreibe es so:
Delphi-Quellcode:
Das hier ist übrigens falsch:
if Ampel1Ro.Visible then
Delphi-Quellcode:
Es muss so lauten:
if Ampel1Ro.Visible { = True } then
begin Ampel1Ro.Visible:= False; Ampel1Ge.Visible:= True; end;
Delphi-Quellcode:
Warum? Schau dir mal die Ampeln an. Die Springen nicht von Rot auf Gelb, sondern auf Rot-Gelb.
if Ampel1Ro.Visible then
begin Ampel1Ge.Visible := true; end; Des Weiteren könntest du deine if-Abfragen mit einem "else" verbinden. Grüße, Matze |
Re: Kreuzung - Timer funktioniert nicht
Klar bleibt die rot.
Zitat:
|
Re: Kreuzung - Timer funktioniert nicht
Stimmt, dann trägt mein Beitrag (entgegen meiner Aussage) doch zur Lösung des Problems bei. :lol:
|
Re: Kreuzung - Timer funktioniert nicht
Genau, "Frau Else" kann es richten ;)
|
Re: Kreuzung - Timer funktioniert nicht
@ Matze:
Hmm... ich verstehe jetzt nicht was an
Delphi-Quellcode:
falsch ist und an
if Ampel1Ro.Visible:= True then
Delphi-Quellcode:
So wie du es willst, wird doch:
if Ampel1Ro.Visible then
wenn Ampel1Ro sichtbar ist, Ampel1Ge sichtbar aber Ampel1Ro nicht unsichtbar?! Ja ich weiß ich hätte auch die passenenden Symbole dafür, das Problem ist: Ich bin zu faul dafür ;). ...und so geht es ja eigentlich auch. @ Deddy H: Ist das Problem etwa das die Ampel so schnell umschaltet das ich das nicht sehe? Ich denke jeder einzelne if-Befehl wird IMMER nach Ablauf des Timer-Intervalls ausgeführt und nicht in 0,1 "Verarbeitungssekunden" von meinem Computer, oder irre ich mich da. |
Re: Kreuzung - Timer funktioniert nicht
Zitat:
Zum "= true": ![]() Edit: s. auch ![]() |
Re: Kreuzung - Timer funktioniert nicht
Ich möchte aber doch das die rote Ampel unsichtbar ist wenn die gelbe sichtbar ist damit sich da nichts überdeckt?
Mein eigentliches Problem ist es doch das sich NICHTS verändert, die Ampel aber schalten soll... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz