AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Kreuzung - Timer funktioniert nicht

Ein Thema von Ghostleader · begonnen am 4. Nov 2009 · letzter Beitrag vom 12. Nov 2009
Antwort Antwort
Seite 1 von 3  1 23      
Ghostleader

Registriert seit: 22. Aug 2009
Ort: Hilden
116 Beiträge
 
Delphi 2010 Professional
 
#1

Kreuzung - Timer funktioniert nicht

  Alt 4. Nov 2009, 19:55
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;
Michael
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Kreuzung - Timer funktioniert nicht

  Alt 4. Nov 2009, 19:57
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Ghostleader

Registriert seit: 22. Aug 2009
Ort: Hilden
116 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Kreuzung - Timer funktioniert nicht

  Alt 4. Nov 2009, 20:01
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.
Michael
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Kreuzung - Timer funktioniert nicht

  Alt 4. Nov 2009, 20:05
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:

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
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#5

Re: Kreuzung - Timer funktioniert nicht

  Alt 4. Nov 2009, 20:08
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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Kreuzung - Timer funktioniert nicht

  Alt 4. Nov 2009, 20:10
Stimmt, dann trägt mein Beitrag (entgegen meiner Aussage) doch zur Lösung des Problems bei.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#7

Re: Kreuzung - Timer funktioniert nicht

  Alt 4. Nov 2009, 20:11
Genau, "Frau Else" kann es richten
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Ghostleader

Registriert seit: 22. Aug 2009
Ort: Hilden
116 Beiträge
 
Delphi 2010 Professional
 
#8

Re: Kreuzung - Timer funktioniert nicht

  Alt 4. Nov 2009, 20:11
@ Matze:
Hmm... ich verstehe jetzt nicht was an
if Ampel1Ro.Visible:= True then falsch ist und an 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.
Michael
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Kreuzung - Timer funktioniert nicht

  Alt 4. Nov 2009, 20:12
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
  Mit Zitat antworten Zitat
Ghostleader

Registriert seit: 22. Aug 2009
Ort: Hilden
116 Beiträge
 
Delphi 2010 Professional
 
#10

Re: Kreuzung - Timer funktioniert nicht

  Alt 4. Nov 2009, 20:16
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...
Michael
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:34 Uhr.
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