![]() |
Einfache Ampelsimulation funktioniert nicht...
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo Leute,
Ich habe mich hier neu angemeldet, weil ich ein Problem mit meiner Ampelsimulation habe... Wir sollen für die Schule jeder einzeln ein Projekt erarbeiten... Ich habe mir das Thema Ampelsimulation ausgesucht... Ich soll eine Ampelsimulation machen und der Umfang, also wie komplex wir das Thema gestalten, ist uns überlassen... Nur ist die Note natürlich umso besser, umso komplexer das Programm ist^^ Ich dachte mir, dass ich in einem ersten Formular erstmal eine einzige Ampel zeige, die automatisch mit einem Timer die Farben in einem vorher definiertem Intervall wechselt... Das geht völlig automatisch und man kann nicht eingreifen, außer dass man auf Start und Stop klicken kann... Das hört sich ziemlich einfach an, deshalb will ich in einem zweiten Formular dann eine Kreuzung oder zumindest etwas komplexeres machen... Aber jetzt bin ich schon beim ersten Formular hängen geblieben... :( Ich denke, ich habe alles richtig programmiert und wenn ich das Programm testen will, meckert Delphi auch nicht wegen irgendwelchen Fehlern... Aber wenn ich jetzt auf Start klicke, passiert nichts... :( Ich habe schon rumgerätselt, an was es liegen könnte, aber mir ist es einfach nicht aufgefallen... Vielleicht kann da mal einer von euch drüber gucken und mir sagen, was ich falsch gemacht habe?? Und ich will nicht, dass ihr meine Hausaufgaben macht, es ist nur so, dass ich absolut nicht weiß, was falsch sein könnte und euer geschultes Auge das sicher sofort erkennt^^ Vielen Dank schon mal im voraus... :) Deepdragon P.S.: Bei der Angabe, welche Programmiersprache ich nutzen würde, wusste ich nicht, was das für eine ist, also habe ich einfach mal Delphi Win32 ausgewählt... Ich habe als Programm Delphi 7 Personal benutzt und mein Betriebssystem ist Windows XP... naja ich denke, ihr wisst, was damit gemeint ist ;) |
Re: Einfache Ampelsimulation funktioniert nicht...
Du hast den Fehler im Timer. Wenn du die Ampel von "Aus" auf "grün" stellst (deine erste if-Bedingung), vergisst du dein IAmpelAus.visible auf false zu setzen. Folglich ist beim 2. Timerdurchlauf deine erste Bedingung immer noch erfüllt, und es wird nie ein else-Zweig abgehandelt.
Ich würde versuchen, das Ganze etwas übersichtlicher zu gestalten, und dir eine TAmpel Klasse zu bilden. Denn spätestens wenn du deine Kreuzung mit mehreren Ampeln abbilden willst, wird deine if-Abfragerei ziemlich unübersichtlich. Wie die TAmpel Klasse aussehen könnte, wäre noch zu überlegen. |
Re: Einfache Ampelsimulation funktioniert nicht...
Zitat:
Delphi-Quellcode:
noch die Zeile
if IAmpelaus.Visible then
begin IAmpelgruen.Visible := true; IAmpelrot.Visible := false; IAmpelgelb.Visible := false; IAmpelrotgelb.Visible := false; Timer1.Interval := 4000; end
Delphi-Quellcode:
braucht, sonst fährst Du immer in den ersten if-Block rein.
IAmpelaus.Visible := false;
Übrigens ist es übersichtlicher, den Quelltext hier zu posten, und zwar ohne die Deklarationen.. Grüße, Messie |
Re: Einfache Ampelsimulation funktioniert nicht...
Zitat:
Zitat:
|
Re: Einfache Ampelsimulation funktioniert nicht...
Zitat:
Hier noch mal der aktuelle Quelltext:
Delphi-Quellcode:
Wíe gesagt, bei mir gehts immer noch nicht... :(
procedure TProjekt_Ampelsimulation_Form1.Timer1Timer(Sender: TObject);
begin if IAmpelaus.Visible then begin IAmpelaus.Visible := false; IAmpelgruen.Visible := true; IAmpelrot.Visible := false; IAmpelgelb.Visible := false; IAmpelrotgelb.Visible := false; Timer1.Interval := 4000; end else if IAmpelgruen.Visible then begin IAmpelaus.Visible := false; IAmpelgruen.Visible := false; IAmpelrot.Visible := false; IAmpelrotgelb.Visible :=false; IAmpelgelb.Visible := true; Timer1.Interval := 1000; end else if IAmpelgelb.Visible then begin IAmpelgelb.Visible := false; IAmpelgruen.Visible := false; IAmpelaus.Visible := false; IAmpelrotgelb.Visible := false; IAmpelrot.Visible := true; Timer1.Interval := 4000; end else if IAmpelrot.Visible then begin IAmpelrot.Visible := false; IAmpelaus.Visible := false; IAmpelgruen.Visible := false; IAmpelgelb.Visible := false; IAmpelrotgelb.Visible := true; Timer1.Interval := 1000; end else if IAmpelrotgelb.Visible then begin IAmpelaus.Visible := false; IAmpelrot.Visible := false; IAmpelrotgelb.Visible := false; IAmpelgruen.Visible := false; IAmpelgelb.Visible := true; Timer1.Interval := 1000; end else if IAmpelgelb.Visible then begin IAmpelaus.Visible := false; IAmpelgelb.Visible := false; IAmpelrot.Visible := false; IAmpelrotgelb.Visible := false; IAmpelgruen.Visible := true; Timer1.Interval := 4000; end end; Zitat:
|
Re: Einfache Ampelsimulation funktioniert nicht...
Ich wuerde mal das Forum absuchen. Ampelsteuerung hatten wir schon mal.
|
Re: Einfache Ampelsimulation funktioniert nicht...
TAmpel ist, wenn man das Ganze richtig ordentlich machen will, aber ich glaube, das ist momentan ein paar Nummern zu groß für dich :shock: . Allerdings hatten meine Vorredner schon recht: Ohne eine Klasse (das war mit TAmpel gemeint) wird es extrem unübersichtlich, wenn es auf mehrere Ampeln hinauslaufen soll. Also liest du dich entweder mal in objektorientierte Programmierung ein oder du beschränkst das Ganze auf maximal 3 Ampeln.
|
Re: Einfache Ampelsimulation funktioniert nicht...
Wenn der Startbutton gedrückt wird einen definierten Anfangszustand für IAmpelAus.visible schaffen.
Delphi-Quellcode:
Grüße
procedure TProjekt_Ampelsimulation_Form1.BStartEinfacheSimulationClick(
Sender: TObject); begin Timer1.Enabled := true; IAmpelAus.Visible:=true; end; Klaus |
Re: Einfache Ampelsimulation funktioniert nicht...
Zitat:
Dank dir, startet die Ampel^^ Aber jetzt habe ich ein Problem... Die Ampel ist zuerst aus, so wie es sein soll... klicke ich auch Start, springt sie auf grün, wartet dann vier sekunden und springt dann auf gelb, dann auf rot und wartet bei rot wieder vier sekunden... das läuft alles prima. Dann springt die Ampel auf RotGelb und dann auf Gelb. Nur jetzt sollte sie auf Grün springen und wieder vier sekunden warten und dann wieder alles von vorne starten. Nur das geschieht nicht. Die Ampel springt nach Gelb wieder auf Rot und dann wiederholt sich nur die Prozedur: rot --> rotgelb --> gelb --> rot --> rotgelb --> gelb --> rot ... usw... Also da muss irgendwie ein Fehler sein... Ich gucke selbst noch mal drüber, aber wäre nett, wenn ihr es auch machen könntet. :) Vielen Dank aber bis jetzt schon mal. Ihr seid echt spitze :) |
Re: Einfache Ampelsimulation funktioniert nicht...
Ich habe in einem anderen Thread hier erklaert wie man eine Ampel repraesentiert.
Delphi-Quellcode:
Man sollte nun eine Zustandsvariable einrichten die man im Timer weiterschaltet (von azGelb auf azRot zuruecksetzen natuerlich). Das ist die eigentliche Ampel. Vom Zustand der Ampel leitet man nun die visuelle Repraesentation ab.
type
TAmpelZustand = (azRot, azRotGelb, azGruen, azGelb);
Delphi-Quellcode:
var
Ampel: TAmpelZustand; ... begin // immer schoen Pascal ausnutzen // den kleinsten und groessten Wert einer Enumeration kann man per Low bzw. High bestimmen if Ampel = High(TAmpelZustand) then Ampel := Low(TAmpelZustand) else // Succ gibt das naechste Element einer Enumeration Ampel := Succ(Ampel); case Ampel of azRot: begin // Darstellung selber machen end; ... |
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-2025 by Thomas Breitkreuz