Autor |
Beitrag |
Kris
Hält's aus hier
Beiträge: 7
|
Verfasst: Mi 16.02.05 23:45
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
      
Beiträge: 506
Erhaltene Danke: 4
Win7
|
Verfasst: 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 
Hält's aus hier
Beiträge: 7
|
Verfasst: 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
      
Beiträge: 849
|
Verfasst: 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:
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;
|
_________________ Ciao, Sprint.
|
|
Kris 
Hält's aus hier
Beiträge: 7
|
Verfasst: Do 17.02.05 00:36
werde ich aufjedenfall ausprobieren und sehen ob ich dahinter steige. danke
|
|
Kris 
Hält's aus hier
Beiträge: 7
|
Verfasst: 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
      
Beiträge: 849
|
Verfasst: 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.
_________________ Ciao, Sprint.
|
|
Kris 
Hält's aus hier
Beiträge: 7
|
Verfasst: Do 17.02.05 01:31
alllles klar, verstehe. und es funktioniert.
vielen dank für deine hilfe und eine gute nacht 
|
|
Rage
      
Beiträge: 32
|
Verfasst: 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
      
Beiträge: 32
|
Verfasst: 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.
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
      
Beiträge: 849
|
Verfasst: Mi 02.03.05 23:32
|
|