Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Kreuzung - Timer funktioniert nicht (https://www.delphipraxis.net/142839-kreuzung-timer-funktioniert-nicht.html)

Ghostleader 4. Nov 2009 18:55


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;

SirThornberry 4. Nov 2009 18:57

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.

Ghostleader 4. Nov 2009 19:01

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.

Matze 4. Nov 2009 19:05

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:
if Ampel1Ro.Visible then
Das hier ist übrigens falsch:

Delphi-Quellcode:
if Ampel1Ro.Visible { = True } then
begin
   Ampel1Ro.Visible:= False;
   Ampel1Ge.Visible:= True;
end;
Es muss so lauten:

Delphi-Quellcode:
if Ampel1Ro.Visible then
begin
   Ampel1Ge.Visible := true;
end;
Warum? Schau dir mal die Ampeln an. Die Springen nicht von Rot auf Gelb, sondern auf Rot-Gelb.

Des Weiteren könntest du deine if-Abfragen mit einem "else" verbinden.

Grüße, Matze

DeddyH 4. Nov 2009 19:08

Re: Kreuzung - Timer funktioniert nicht
 
Klar bleibt die rot.
Zitat:

Delphi-Quellcode:
procedure TForm1.TmAmpelTimer(Sender: TObject);
begin
  if Ampel1Ro.Visible{ = True} then //trifft zu
    begin
      Ampel1Ro.Visible:= False;
      Ampel1Ge.Visible:= True;     //jetzt gelb sichtbar
    end;
  if Ampel1Ge.Visible{ = True} then //trifft nach obiger Änderung zu
    begin
      Ampel1Ge.Visible:= False;
      Ampel1Gr.Visible:=True;      //nun grün sichtbar
    end;
  if Ampel1Gr.Visible{ = True} then //trifft also zu
    begin
      Ampel1Gr.Visible:= False;
      Ampel1Ro.Visible:= True;     //jetzt sind wir wieder auf rot
    end;


Matze 4. Nov 2009 19:10

Re: Kreuzung - Timer funktioniert nicht
 
Stimmt, dann trägt mein Beitrag (entgegen meiner Aussage) doch zur Lösung des Problems bei. :lol:

DeddyH 4. Nov 2009 19:11

Re: Kreuzung - Timer funktioniert nicht
 
Genau, "Frau Else" kann es richten ;)

Ghostleader 4. Nov 2009 19:11

Re: Kreuzung - Timer funktioniert nicht
 
@ Matze:
Hmm... ich verstehe jetzt nicht was an
Delphi-Quellcode:
if Ampel1Ro.Visible:= True then
falsch ist und an
Delphi-Quellcode:
if Ampel1Ro.Visible then
So wie du es willst, wird doch:
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.

Matze 4. Nov 2009 19:12

Re: Kreuzung - Timer funktioniert nicht
 
Zitat:

Zitat von Ghostleader
wenn Ampel1Ro sichtbar ist, Ampel1Ge sichtbar aber Ampel1Ro nicht unsichtbar?!

Richtig (Erklärung, s. meinen Beitrag).

Zum "= true": Über den Umgang mit Boolean

Edit: s. auch Wikipedia: Ampel

Ghostleader 4. Nov 2009 19:16

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 21:00 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz