AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Einfache Ampelsimulation funktioniert nicht...
Thema durchsuchen
Ansicht
Themen-Optionen

Einfache Ampelsimulation funktioniert nicht...

Ein Thema von deepdragon · begonnen am 28. Mai 2007 · letzter Beitrag vom 10. Jun 2007
Antwort Antwort
Seite 1 von 3  1 23      
deepdragon

Registriert seit: 28. Mai 2007
22 Beiträge
 
Delphi 7 Personal
 
#1

Einfache Ampelsimulation funktioniert nicht...

  Alt 28. Mai 2007, 14:53
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
Angehängte Dateien
Dateityp: zip ampel-source_703.zip (469,3 KB, 31x aufgerufen)
Dateityp: exe pampelsimulation_130.exe (534,0 KB, 48x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Einfache Ampelsimulation funktioniert nicht...

  Alt 28. Mai 2007, 15:03
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.
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#3

Re: Einfache Ampelsimulation funktioniert nicht...

  Alt 28. Mai 2007, 15:05
Zitat von deepdragon:
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??
Also, bei mir passiert schon etwas mit Deinem Beispiel... nur bleibt die Ampel immer grün, weil der Block
Delphi-Quellcode:
if IAmpelaus.Visible then
    begin
      IAmpelgruen.Visible := true;
      IAmpelrot.Visible := false;
      IAmpelgelb.Visible := false;
      IAmpelrotgelb.Visible := false;
      Timer1.Interval := 4000;
    end
noch die ZeileIAmpelaus.Visible := false; braucht, sonst fährst Du immer in den ersten if-Block rein.

Übrigens ist es übersichtlicher, den Quelltext hier zu posten, und zwar ohne die Deklarationen..

Grüße, Messie
  Mit Zitat antworten Zitat
deepdragon

Registriert seit: 28. Mai 2007
22 Beiträge
 
Delphi 7 Personal
 
#4

Re: Einfache Ampelsimulation funktioniert nicht...

  Alt 28. Mai 2007, 15:07
Zitat von Jelly:
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.
Also ich habe jetzt "IAmpelaus.Visible := false;" eingegeben... hattest recht, das hatte ich noch vergessen... jetzt ist es aber trotzdem so, dass sich nichts tut, wenn ich auf Start klicke...??

Zitat:
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.
Tut mir leid, aber das habe ich gar nicht verstanden... Was ist denn ein TAmpel? sry, aber das habe ich noch nie gehört...
  Mit Zitat antworten Zitat
deepdragon

Registriert seit: 28. Mai 2007
22 Beiträge
 
Delphi 7 Personal
 
#5

Re: Einfache Ampelsimulation funktioniert nicht...

  Alt 28. Mai 2007, 15:09
Zitat von Jelly:
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.
Also ich habe jetzt "IAmpelaus.Visible := false;" eingegeben... hattest recht, das hatte ich noch vergessen... jetzt ist es aber trotzdem so, dass sich nichts tut, wenn ich auf Start klicke...??

Hier noch mal der aktuelle Quelltext:

Delphi-Quellcode:
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;
Wíe gesagt, bei mir gehts immer noch nicht...



Zitat:
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.
Tut mir leid, aber das habe ich gar nicht verstanden... Was ist denn ein TAmpel? sry, aber das habe ich noch nie gehört...
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#6

Re: Einfache Ampelsimulation funktioniert nicht...

  Alt 28. Mai 2007, 15:24
Ich wuerde mal das Forum absuchen. Ampelsteuerung hatten wir schon mal.
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Einfache Ampelsimulation funktioniert nicht...

  Alt 28. Mai 2007, 15:26
TAmpel ist, wenn man das Ganze richtig ordentlich machen will, aber ich glaube, das ist momentan ein paar Nummern zu groß für dich . 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.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Einfache Ampelsimulation funktioniert nicht...

  Alt 28. Mai 2007, 15:28
Wenn der Startbutton gedrückt wird einen definierten Anfangszustand für IAmpelAus.visible schaffen.

Delphi-Quellcode:
procedure TProjekt_Ampelsimulation_Form1.BStartEinfacheSimulationClick(
  Sender: TObject);
begin
    Timer1.Enabled := true;
    IAmpelAus.Visible:=true;
end;
Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
deepdragon

Registriert seit: 28. Mai 2007
22 Beiträge
 
Delphi 7 Personal
 
#9

Re: Einfache Ampelsimulation funktioniert nicht...

  Alt 28. Mai 2007, 15:58
Zitat von Klaus01:
Wenn der Startbutton gedrückt wird einen definierten Anfangszustand für IAmpelAus.visible schaffen.

Delphi-Quellcode:
procedure TProjekt_Ampelsimulation_Form1.BStartEinfacheSimulationClick(
  Sender: TObject);
begin
    Timer1.Enabled := true;
    IAmpelAus.Visible:=true;
end;
Grüße
Klaus
Vielen Dank Klaus

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
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#10

Re: Einfache Ampelsimulation funktioniert nicht...

  Alt 28. Mai 2007, 16:18
Ich habe in einem anderen Thread hier erklaert wie man eine Ampel repraesentiert.
Delphi-Quellcode:
type
  TAmpelZustand = (azRot, azRotGelb, azGruen, azGelb);
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.

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;
    ...
  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 19:57 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