| Autor |
Beitrag |
tuni94
Hält's aus hier
Beiträge: 6
|
Verfasst: Di 02.11.10 17:54
Morgen,
Ich schreiben morgen eine Klausur, da wird zusätzlich das Thema Ampelschaltung mit einem Timer vorkommen. Aber ich war das letzte mal im Unterricht nicht anwesend und habe den Quelltext bzw. den Anfang nicht mitbekommen.
Aufgabe: Wir sollen eine Ampel erstellen (4 Images:Rot-Rotgelb-Grün-Gelb) diese 4 Bilder sollen durch einen Klick, der den Timer in Gang setzt laufen. Das mit dem Interval ist so, dass die Rote Ampel und die grüne Ampel länger "aufleuchten" als die Rotgelb und Gelb. Diese soll ich in einem Quelltext zusammenfassen.
Nach langer Suche habe ich aber leider nicht das richtige gefunden, obwohl es sehr viele Themen zu der Ampelschaltung gibt. Also ich glaube If-Anweisungen müssen vorhanden sein (?).
Ich bitte euch somit um dringende Hilfe ..
Mfg Tuni
Und wie ich grad seh, hab ich hier keine Icons mit einer Ampel drauf. Wäre nett einen Link zu posten
|
|
platzwart
      
Beiträge: 1054
Erhaltene Danke: 78
Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
|
Verfasst: Di 02.11.10 18:32
Ehm... erwartest du nun ernsthaft, dass dir hier jemand das ganze Projekt so aus Spaß innerhalb der nächten Stunden schreibt? Wenn du konkrete Fragen hast, helfen wir dir gerne, aber deine Arbeit an sich wird mit Sicherheit niemand abnehmen.
Hast du denn einen Ansatz? Hast du das ganze mal auf Papier aufgezeichnet? Wo genau kommst du denn nicht weiter?
_________________ Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
|
|
tuni94 
Hält's aus hier
Beiträge: 6
|
Verfasst: Di 02.11.10 18:38
Ok ich sage es mal so:
Ansatz brauche ich ja nur vielleicht das erste Beispiel..
Aber ich habe in der Zeit schon etwas versucht, aber es klappt leider nocht nicht.
Image1=Rot Image2=Rotgelb Image3=Grün Image4=Gelb
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42:
| procedure TForm1.Button1Click(Sender: TObject); begin if Button1.Caption='Start' then begin Timer1.enabled:=true ; Button1.Caption:='Stop' ; end else if Button1.caption='Stop' then begin Timer1.enabled:=false ; Button1.caption:='Start' ; end
end;
procedure TForm1.Timer1Timer(Sender: TObject); begin
if image1.Visible=false then begin image1.Visible:=true ; image4.Visible:=false ; end else if image1.visible=true then begin image1.visible:=false; image2.visible:=true ; end else if image2.Visible=true then begin image2.visible:=false; image3.Visible:=true; end else if image3.visible=true then begin image3.visible:=false ; image4.visible:=true; end end;
end. |
Moderiert von Martok: Delphi-Tags gesetzt
|
|
platzwart
      
Beiträge: 1054
Erhaltene Danke: 78
Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
|
Verfasst: Di 02.11.10 18:39
Und was genau geht nicht?
_________________ Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Di 02.11.10 18:41
die verschiedenen Zeiten bei der Ampel (das grün länger ist als die anderen Phasen) kannst du erreichen indem du den intervall vom timer immer dann anders setzt. (vor dem grün schalten länger, nach dem grün schalten wieder kürzer usw)
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Di 02.11.10 18:43
tuni94 hat folgendes geschrieben : |
Delphi-Quelltext 1: 2: 3: 4: 5:
| if image1.Visible=false then begin image1.Visible:=true ; image4.Visible:=false ; end | |
Das ist natürlich Quatsch, denn Image 1 ist ja nie sichtbar (außer in der Rot-Phase). Das heißt du schaltest IMMER in die Rot-Phase, wenns nicht gerade rot ist.
Also besser auf true prüfen, wie bei den andren else-Zweigen auch. Dafür musst du irgendwann mal eins vorher auf true setzen ODER du müsstest gucken, ob GARKEINS sichtbar ist, und dann rot sichtbar machen.
Es hilft übrigens ungemein, die images mit Namen zu versehen (z.B. imgRot) oder einen Kommentar dranzuschreiben
Wenn du noch Icons brauchst, hab welche hier.
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
Zuletzt bearbeitet von Xion am Di 02.11.10 18:46, insgesamt 3-mal bearbeitet
|
|
tuni94 
Hält's aus hier
Beiträge: 6
|
Verfasst: Di 02.11.10 18:45
//EDIT
Hab es mal umgeschrieben :
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52:
| procedure TForm1.Button1Click(Sender: TObject); begin if Button1.Caption='Start' then begin Timer1.enabled:=true ; Button1.Caption:='Stop' ; image1.visible:=true ; end else if Button1.caption='Stop' then begin Timer1.enabled:=false ; Button1.caption:='Start' ; end
end;
procedure TForm1.Timer1Timer(Sender: TObject); begin
if image1.visible=true then begin image1.visible:=false; image2.visible:=true ; image3.Visible:=false ; image4.Visible:=false ; end else if image2.Visible=true then begin image2.visible:=false; image3.Visible:=true; image1.Visible:=false ; image4.Visible:=false ; end else if image3.visible=true then begin image3.visible:=false ; image4.visible:=true; image1.Visible:=false ; image2.Visible:=false ; end
else if image4.visible=true then begin image1.visibel:=true; image3.visible:=false ; image2.visible:=false ; image4.visible:=false; end end;
end. |
Nun es springt von Rot auf Rotgelb, aber mehr geht auch nicht .
@ Elundril meinst du das mit dem Interval so:
Ich hab in Erinnerung das man das so schreibt zb;
beim Timer:
Delphi-Quelltext 1: 2: 3: 4: 5:
| begin image3.visible:=true interval=500
end |
oder irgendwie sowas
aber bis jetzt danke für eure Hilfe
Moderiert von Martok: Delphi-Tags gesetzt
Zuletzt bearbeitet von tuni94 am Di 02.11.10 18:50, insgesamt 1-mal bearbeitet
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Di 02.11.10 18:48
jap, so in der art mein ich das (aber nur in der art, ein bisschen mehr gehört da noch dazu). außerdem: bei den if-anweisungen niemals auf false oder true überprüfen.
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Di 02.11.10 18:49
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
tuni94 
Hält's aus hier
Beiträge: 6
|
Verfasst: Di 02.11.10 18:50
Habs oben mal editiert 
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Di 02.11.10 18:56
und? Auswirkung?  noch Probleme?
Edit: So ganz passt es noch nicht, Image1 darfst du nicht bei Start setzen (dann wirds immer rot wenn du die Ampel weiterlaufen lassen willst) sondern ich würde das ins OnCreate der Form setzen. Oder noch einfacher, ganz unten nach den else if einfach ein else, wo du dann Image1 auf sichtbar setzt
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
Zuletzt bearbeitet von Xion am Di 02.11.10 18:58, insgesamt 2-mal bearbeitet
|
|
Martok
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: Di 02.11.10 18:58
Wo du schonmal dabei bist:
Bitte verwende für Quellcode die entsprechenden [delphi ]-Tags, dann wird er "schöner" dargestellt als im Fließtext. Beispiel:
Quelltext 1:
| <span class="inlineSyntax"><span class="codecomment">{PROTECTTAGde98e1061ea2d60a7e9038b2b3c90c98}</span></span> |
Wird:
Delphi-Quelltext
Viele Grüße,
Martok
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
|
|
Gerd Kayser
      
Beiträge: 632
Erhaltene Danke: 121
Win 7 32-bit
Delphi 2006/XE
|
Verfasst: Di 02.11.10 19:03
|
|
tuni94 
Hält's aus hier
Beiträge: 6
|
Verfasst: Di 02.11.10 19:11
So habs nun so :
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48:
| procedure TForm1.Button1Click(Sender: TObject); begin if Button1.Caption='Start' then begin Timer1.enabled:=true ; Button1.Caption:='Stop' ;
end else if Button1.caption='Stop' then begin Timer1.enabled:=false ; Button1.caption:='Start' ; end end;
procedure TForm1.Timer1Timer(Sender: TObject); begin if image1.visible=true then begin image1.visible:=false; image2.visible:=true ; image3.Visible:=false ; image4.Visible:=false ; end else if image2.Visible=true then begin image2.visible:=false; image3.Visible:=true; image1.Visible:=false ; image4.Visible:=false ; end else if image3.visible=true then begin image3.visible:=false ; image4.visible:=true; image1.Visible:=false ; image2.Visible:=false ; end else if image4.visible=true then begin image3.Visible:=false ; image4.Visible:=false ; image1.Visible:=true ; image2.Visible:=false ; end
end; |
Nun hab ich nur noch das Problem, was Xion erwähnt hat, dass am Anfang alle Ampeln sichtbar sind und dann bei Button1click direkt auf Rotgelb springt.
Die anderen Themen sind alle Leicht, hoffe werde mein Können in der Klausur auch zeigen
@ Gerd Kayser würd ich ja gern, aber keine Ahnung ob es unser Lehrer es so sehen will
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Di 02.11.10 19:23
das kann ja keiner mitansehen. mal überarbeitet (siehe kommentare im Quelltext):
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43:
| procedure TForm1.Button1Click(Sender: TObject); begin if Button1.Caption='Start' then begin Timer1.enabled:=true ; Button1.Caption:='Stop' ; end else begin Timer1.enabled:=false ; Button1.caption:='Start' ; end; end;
procedure TForm1.Timer1Timer(Sender: TObject); begin if image1.visible then begin image1.visible := false; image2.visible := true; image3.Visible := false; image4.Visible := false; timer1.interval := 10000; end else if image2.Visible then begin image2.visible := false; image3.Visible := true; image1.Visible := false; image4.Visible := false; timer1.interval := 2000; end else if image3.visible then begin image3.visible := false; image4.visible := true; image1.Visible := false; image2.Visible := false; timer1.interval := 2000; end else if image4.visible then begin image3.Visible := false; image4.Visible := false; image1.Visible := true; image2.Visible := false; timer1.interval := 10000; end; end; |
btw, warum 4 images bei einer ampel? Wir in österreich haben nur 3 Farben bei einer Ampel...
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Di 02.11.10 19:25
elundril hat folgendes geschrieben : |
btw, warum 4 images bei einer ampel? Wir in österreich haben nur 3 Farben bei einer Ampel... |
Ne, das ist ja zu einfach. In Deutschland gibt es einen Unterschied zwischen Gelb und Gelb  Wird es nämlich gleich grün, dann ist es RotGelb, wird es gleich Rot, dann leuchtet nur gelb.
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
Martok
      
Beiträge: 3661
Erhaltene Danke: 604
Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
|
Verfasst: Di 02.11.10 19:31
_________________ "The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
|
|
tuni94 
Hält's aus hier
Beiträge: 6
|
Verfasst: Di 02.11.10 19:38
Delphi-Quelltext 1:
| if image1.visible then begin .. |
wenn ich es so am anfang reinschreibe. Dann bleibt die Ampel ja immer auf einer Farbe? Zumindest bei mir.
Das mit dem Interval hab ichs nun verstanden, nur noch die Ampel am Anfang muss auf Rot bleiben
/Edit
Nach etwas rumprobieren hab ichs raus , hoff ich zumindest. Da die Ampel wieder auf Rot geht, wenn ich auf den Button 'Stop' klicke:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| procedure TForm1.Button1Click(Sender: TObject); begin if Button1.Caption='Start' then begin Timer1.enabled:=true ; Button1.Caption:='Stop' ;
end
else begin Timer1.enabled:=false ; Button1.caption:='Start' ; end ; begin Image1.Visible:=true ; image2.Visible:=false ; image3.Visible:=false ; image4.Visible:=false ; end end; |
|
|