![]() |
Ampelschaltung
Also ich habe folgendes Problem. Es ist glaub ich ganz einfach zu löse, aber ich habe kein plan wie.
Ich soll ein Programm amchen mit einem einzigen Button. Das soll das Formular die Farbe wie eine Ampel ändern lassen. Also wenn ich raufklicke soll es erst grün, beim nächsten Klick gelb,beim nächsten Klick Rot,beim nächsten Klick wieder gelb, beim nächsten Klick Grün, und das soll immer wieder von vorne gehen wie halt ne richtige Ampel. Und wir amchen graden Verzweigungen also das mit If, then else und so sollte eigentlich ganz einfach sein. Kann mir jemadn irgendwie beim Quelltextr helfen oder den hier reinschreiben? wäre nett lg Alex ;) |
AW: Ampelschaltung
Klar können wir beim Quelltext helfen. Nur solltest du dann auch deinen Quelltext posten und sagen, was nicht funktioniert.
Und noch ein Tipp, gib mal Ampel in der Suche ein. |
AW: Ampelschaltung
Ich würde das ungefähr so lösen:
Delphi-Quellcode:
Gruß
Farbarray [0..3] of farben = (grün,gelb,rot,gelb);
.... Anzeigefarbe:=Farben[Klickzaehler and 3]; K-H |
AW: Ampelschaltung
Ich glaube, es geht dem Lehrer um die if-Verzweigung.
|
AW: Ampelschaltung
jaa also ich habe eigentlichn noch kaum was geschafft
bei mir stande bis jetzt nur das mit if button.color=clgreen; then button.color:=yellow; else button.color;=green; und dann konnte man schon mal von nix auf grün und dann auf gelb schalten und danach wusste ich nicht wie es weiter geht das man auf rot macht danach weil bei mir wurde es dann beim ersten klick rot :S |
AW: Ampelschaltung
ups sorry ich meinte
if formular.color=clgreen; then formular.color:=yellow; else formular.color;=green; und dann konnte man schon mal von nix auf grün und dann auf gelb schalten und danach wusste ich nicht wie es weiter geht das man auf rot macht danach weil bei mir wurde es dann beim ersten klick rot :S ICh weiß nicht, wie man das mitm Quelltext einfügt. :S auf jeden fall soll ich ein Programm machen das mit nur einem button funktioniert er soll die farbe bei jedem klick ändern wie eine Ampel |
AW: Ampelschaltung
Du kannst deine Beiträge innerhalb von 24 Stunden editieren. Du musst also nicht jedes mal einen neuen Beitrag erstellen. Und bitte benutze Delphi-Tags für deinen Delphi-Code.
Versuch doch erst mal das ganze auf Papier aufzuschreiben oder in einem Flussdiagramm darzustellen. |
AW: Ampelschaltung
Na dann vielleicht so:
Code:
Gruß
wenn Farbe=Grün dann Farbe=gelb
wenn Farbe=Gelb dann wenn Vorgängerfarbe=grün dann Farbe=rot wenn Vorgängerfarbe=rot dann Farbe=grün wenn Farbe=rot dann Farbe=grün K-H |
AW: Ampelschaltung
ja wie soll ich das denn schreiben
es wird dann immer sofort rot und nicht erst grün und gelb |
AW: Ampelschaltung
Ganz einfach in dem du seinen Code in Delphi schreibst ;)
Du musst zuerst die Farbe auf deinen gewünschten Startwert setzen (rot wäre wohl das "sicherste"). Das kannst du im FormCreate machen (doppelklick auf das Formular). Dann übersetzt du den Code in Delphi (das sind nur ifs und elses :stupid: ) und lässt den ausführen, wenn man auf den Button klickt. Das sollte dann funktionieren. Ansonsten brauchen wir mehr Code. Besonders dein zweiter Code sieht sehr interessant aus:
Delphi-Quellcode:
Heißt: Wenn das Formular Grün ist, dann mache es Gelb, ansonsten mache es Grün. D.h. wenn es gelb oder rot ist, wird es sofort Grün.
if formular.color=clgreen;
then formular.color:=yellow; else formular.color;=green; MfG Fabian |
AW: Ampelschaltung
Direkt auf die Farben zu gehen ist Quark.
Es gibt doch Ampelphasen, siehe ![]() Zusätzlich zur Phase 1 bis 4 kommt noch die Phase 0 hinzu (das bedeutet alles aus; bzw. Farbe Schwarz)
Delphi-Quellcode:
Bei jedem Klick auf den Button wird die Ampelphase um eins hochgezählt,
var
ampelphase : integer; // 0 bis 4 aber wenn die aktuelle Ampelphase schon = 4 ist springt man zurück auf 1. Die Abfolge der Ampelphasen wäre also: 0 - 1 - 2 - 3 - 4 - 1 - 2 - 3 ... Jetzt muss man nur noch der Ampelphase eine Farbe zuordnen und schon ist man fertig. Ampelphase 2 wäre übrigens Rot & Geld ==> Orange. |
AW: Ampelschaltung
Wie war das mit Flussdiagramm? Rot - Gelb - Grün - Gelb (sind 4 Zustände)
So, wie kommt man jetzt von dem ersten Zustand auf den nächsten? Ganz einfach. Zuerst definiert man, dass man sich beim 1. Zustand befindet. Die Ampel ist also rot.
Delphi-Quellcode:
So, jetzt wird der Button gedrückt. Dadurch änderst du zuerst den Zustand.
AmpelFeld.Color := clRed;
Zustand := 1;
Delphi-Quellcode:
So, jetzt gehst du immer wieder alle Zustände durch. Visuell passiert jetzt noch nichts. Das kommt jetzt erst:
procedure TForm1.Button1Click(Sender: TObject);
begin Zustand := Zustand + 1; // Zustand ist eine globale Variable (var Zustand: Integer) if Zustand > 4 then Zustand := 1;
Delphi-Quellcode:
So, jetzt musst du das erst einmal verstehen. Dazu erklärst DU mir mal, was der obrige Code macht.
if (Zustand = 1) then // Ampel wird ROT
AmpelFeld.Color := clRed; if (Zustand = 2) then // Ampel wird das erste mal Gelb (oder Rot/Gelb) AmpelFeld.Color := clYellow; if (Zustand = 3) then // Ampel wird grün AmpelFeld.Color := clGreen; if (Zustand = 4) then // Ampel wird das 2. Mal Gelb AmpelFeld.Color := clYellow; end; Bernhard |
AW: Ampelschaltung
das ist mein quelltext keine ahnugn wie man den anders einfügt
procedure TForm1.AmpelBtnClick(Sender: TObject); begin if form1.color=clgreen then form1.color:=clyellow else form1.color:=clgreen; if form1.color=clyellow then form1.color:=clred; end; aber das geht auch nicht es wird einfach grün dann rot dann wieder grün und ich weiß nichjt wie man das ändert |
AW: Ampelschaltung
Delphi-Quellcode:
Oben setzt du es auf gelb, wenn es grün ist. Direkt da drunter gehst du auf rot, wenn es gelb ist. Du springst also immer von gelb auf rot. Wenn man seinen Code etwas strukturiert wie in diesem Post fällt sowas auch auf. Und nimm dir die Anregungen hier doch bitte etwas zu Herzen, besonders das mit den Delphi-Tags... Dieses Husch-Pfusch-Verhalten und Hauptsache die Aufgabe fertig bekommen wird dich nicht weiter bringen, weder beim lernen von Delphi, noch bei der Hilfsbereitschaft der anderen Helfer hier...
if form1.color=clgreen then
form1.color:=clyellow else form1.color:=clgreen; if form1.color=clyellow then form1.color:=clred; |
AW: Ampelschaltung
Liste der Anhänge anzeigen (Anzahl: 1)
Tipp:
Delphi-Quellcode:
Wenn A wahr ist (z.B. eine Zahl hat einen bestimmten Wert oder dein Formular ist Grün), dann wird der then-Teil abgearbeitet. Das wäre der Befehl B. Der macht bei dir das Formular Gelb. D.h. wenn dein Formular Grün ist, wird deines Gelb. Im Else Teil steht alles, was passiert, wenn die Bedingung A nicht wahr ist. Hier wir der Befehl C ausgeführt, der wäre bei dir, dass das Formular Grün wird.
if (A) then
B else C; C kann aber auch mehrere Befehle enthalten:
Delphi-Quellcode:
Möchtest du überprüfen, ob die Ampel Gelb war, und du hast ausgeschlossen, dass sie Grün war kannst du es so machen:
if (A) then
B else begin C1; C2; end;
Delphi-Quellcode:
Jetzt wird geguckt, ob die Ampel grün war. War sie das nicht wird im else Teil gesprungen. Wenn sie dort Gelb war (= D), dann wird die Ampel rot (= E). Natürlich kann du da auch noch ein else-Zweig machen.
if (A) then
B else begin if (D) then E; end;
Delphi-Quellcode:
Also, wenn sie weder grün ist, noch gelb, dann wird der Befehl C ausgeführt. Das wäre jetzt der Fall wenn die Ampel zum Beispiel Rot ist (oder aus). Das heißt jetzt wird es Gelb (wir gehen davon aus, dass die Ampel nie aus sein wird).
if (A) then
B else begin if (D) then E else C; end; Das kannst du übrigens weiter vereinfachen:
Delphi-Quellcode:
Das bedeutet so viel wie:
if (A) then
B else if (D) then E else C;
Code:
Bei dir wäre das:
Wenn die Bedingung A wahr ist, dann
Führe den Befehl B aus Ansonsten (= else) wenn die Bedingung D wahr ist, dann (= if) Führe den Befehl E aus Ansonsten Führe den Befehl C aus
Delphi-Quellcode:
Ich glaube darauf wolltest du mit deiner Konstruktion hinaus.
if form1.color=clgreen then
form1.color:=clyellow else if form1.color=clyellow then form1.color:=clred else form1.color:=clYellow; MfG Fabian PS: Lasse das
Delphi-Quellcode:
weg, wenn es in einer Methode ist, die
form1.
Delphi-Quellcode:
heißt. Das brauchst du nicht, und könnte irgendwann zu Problemen führen (hier nicht, aber es ist besser, wenn man sich das jetzt schon angewöhnt).
procedure/function TForm1.[...]
PPS: Wegen der Tags: Markiere deinen Quelltext und klicke auf den Delphi Helm (Anhang 32221) oben in der Reihe! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:30 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