Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - If Then Else bei Ampelsteuerung
Kris - Mi 16.02.05 23:45
Titel: If Then Else bei Ampelsteuerung
Hallo,
ich habe im informatikuntericht seit drei wochen delphi, bin also anfänger und habe zwei elementare fragen.
1. ich habe eine ampel aus drei shapes auf einem panel eingerichtet. mit einem button-klick soll die ampel umspringen. Das Problem ist, dass nach rot-orange grün leuchten soll. wie gebe ich dann die "if then else abfrage" ein.
hier mein quelltext:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure TForm1.Button1Click(Sender: TObject); begin if shape1.brush.color=clred then begin shape1.brush.color:=clred; shape2.brush.color:=clyellow; shape3.brush.color:=clwhite end
else if (shape1.brush.color=clred) and (shape2.Brush.color=clyellow) then begin shape1.brush.color:=clwhite; shape2.brush.color:=clwhite; shape3.brush.color:=clgreen; end
else if shape3.brush.color=clgreen then begin shape1.brush.color:=clwhite; shape2.brush.color:=clyellow; shape3.brush.color:=clwhite; end
else if shape2.brush.color=clyellow then begin shape1.brush.color:=clyellow; shape2.brush.color:=clyellow; shape3.Brush.color:=clwhite; end
end; |
nach rot-orange passiert gar nichts mehr? vieleicht kann mir ja jemand helfen...
danke
Moderiert von
Christian S.: Delphi-Tags hinzugefügt.
Moderiert von
Tino: Titel geändert.Moderiert von
Tino: Topic aus Sonstiges verschoben am Fr 18.02.2005 um 11:34
wunsiedler - Mi 16.02.05 23:55
weil rot/orange leuchtet und er dann immer die erste if-abfrage abarbeitet, weil da ja rot abgefragt wird
Kris - Do 17.02.05 00:08
jetzt hat es geklappt. habe einfach die rot-orange anfrage als erste if platziert.
vielen dank für deine hilfe
:)
Sprint - Do 17.02.05 00:14
Vielleicht habt ihr das im Informatikunternicht noch nicht gehabt, aber eine Case Anweisung macht in meinen Augen da mehr Sinn. Besonders kann man den Quelltext dann viel besser lesen.
Das könnte dann z.B. so aussehen:
Delphi-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: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60:
|
type TAmpelStatus = ( Gruen, Orange, Rot, OrangeRot);
var AmpelStatus: TAmpelStatus;
procedure TForm1.FormCreate(Sender: TObject); begin
AmpelStatus := Gruen; Shape1.Brush.Color := Self.Color; Shape2.Brush.Color := Self.Color; Shape3.Brush.Color := clGreen;
end;
procedure TForm1.Button1Click(Sender: TObject); begin
case AmpelStatus of
Gruen: begin Shape2.Brush.Color := clYellow; Shape3.Brush.Color := Self.Color; AmpelStatus := Orange; end;
Orange: begin Shape1.Brush.Color := clRed; Shape2.Brush.Color := Self.Color; AmpelStatus := Rot; end;
Rot: begin Shape2.Brush.Color := clYellow; AmpelStatus := OrangeRot; end;
OrangeRot: begin Shape1.Brush.Color := Self.Color; Shape2.Brush.Color := Self.Color; Shape3.Brush.Color := clGreen; AmpelStatus := Gruen; end;
end;
end;
|
Kris - Do 17.02.05 00:36
werde ich aufjedenfall ausprobieren und sehen ob ich dahinter steige. danke
Kris - Do 17.02.05 00:46
vielleicht kannst du mir auch noch sagen wie ich einen timer einbringe, damit die ampel von alleine umspringt. jedoch springt sie nicht mit klicken auf den button, sondern sie fängt automatisch an . darauf hin habe ich im objektinspektor "enabled=false" eingestellt.
jetzt funktiniert es wieder nur über "button klicken" und nicht automatisch. ich hoffe es ist verständlich was ich da meine
mein queltext
Delphi-Quelltext
1: 2: 3: 4:
| procedure TForm1.Timer1Timer(Sender: TObject); begin button1.click; end; |
end.
muss ich das vieleicht wo anders platzieren :?:
Moderiert von
Christian S.: Delphi-Tags hinzugefügt.
Sprint - Do 17.02.05 01:17
Du fügst den Code zum Umspringen der Ampel in das TTimer Ereignis ein. Und im Klick Ereignis deines Button startest du den Timer.
Delphi-Quelltext
1: 2: 3: 4:
| procedure TForm1.Button1Click(Sender: TObject); begin Timer1.Enabled := not Timer1.Enabled; end; |
So kannst du über den ButtonClick den Timer starten und stoppen.
Kris - Do 17.02.05 01:31
alllles klar, verstehe. und es funktioniert.
vielen dank für deine hilfe und eine gute nacht :D :D
Rage - Mi 02.03.05 22:47
wo wir gerade bei dem Timer sind. wie genau erstellt man den?
Ich habe das ma so gemacht. habe meine oberfläche vom Program erstellt, dann oben auf "Komponente" dort TTimer ausgewählt. so wenn ich jetzt auf meine Form doppelklick mache un so zum quellcode komme. steht oben einmal "Unit1" und "Timer" so aber wo muss ich den was reinschreiben? muss ich die beiden Formulare erst noch verknüpfen?
bei meiner "unitq" steht unter "Type" schon mal nix vom "Timer" das kann doch net gehn oder?
Rage - Mi 02.03.05 23:25
also ich hab das nochma neu probiert wenn ich meinen "start" butoon klick soll sich der Shape1 erst rot färben dann eine sekunde später wechselt er die farbe zu grün und wieder eine sekunde später zu gelb.
Delphi-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: 44: 45:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls;
type TForm1 = class(TForm) Timer1: TTimer; Button1: TButton; Button2: TButton; Button3: TButton; Shape1: TShape; Shape2: TShape; procedure Timer1Timer(Sender: TObject); procedure Button1Click(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Timer1Timer(Sender: TObject); begin Timer1.Interval := 3000; end;
procedure TForm1.Button1Click(Sender: TObject); begin Timer1.Enabled := True; Shape1.Brush.Color := clRed; Shape1.Brush.Color := clGreen; Shape1.Brush.Color := clYellow; end;
end. |
das problem an der sache is nur das er die farben Red und Green einfach auslässt und sofort zu Yellow springt, und warum macht er das? weil der Timer noch nicht funktioniert, so un wie bekomm ich den jetzt so einfach un simpel an dem beispiel zu laufen?
der ansatz sollte doch stimmen oder?
Moderiert von
Gausi: Delphi-Tags hinzugefügt.
Sprint - Mi 02.03.05 23:32
Delphi-Quelltext
1: 2: 3: 4: 5:
| procedure TForm1.FormCreate(Sender: TObject); begin Timer1.Interval := 1000; Timer1.Enabled := False; end; |
Delphi-Quelltext
1: 2: 3: 4: 5:
| procedure TForm1.Button1Click(Sender: TObject); begin Shape1.Brush.Color := clRed; Timer1.Enabled := True; end; |
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.Timer1Timer(Sender: TObject); begin with Shape1.Brush do case Color of clRed: Color := clGreen; clGreen: Color := clYellow; else Timer1.Enabled := False; end; end; |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!