Autor Beitrag
Kris
Hält's aus hier
Beiträge: 7



BeitragVerfasst: 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:

ausblenden 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 user profile iconChristian S.: Delphi-Tags hinzugefügt.
Moderiert von user profile iconTino: Titel geändert.
Moderiert von user profile iconTino: Topic aus Sonstiges verschoben am Fr 18.02.2005 um 11:34
wunsiedler
ontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 506
Erhaltene Danke: 4

Win7

BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 849



BeitragVerfasst: 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:
ausblenden volle Höhe 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;

{--------------------------------------------------------------------------------------------------}

_________________
Ciao, Sprint.
Kris Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Do 17.02.05 00:36 
werde ich aufjedenfall ausprobieren und sehen ob ich dahinter steige. danke
Kris Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: 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
ausblenden 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 user profile iconChristian S.: Delphi-Tags hinzugefügt.
Sprint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 849



BeitragVerfasst: 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.
ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 32



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 32



BeitragVerfasst: 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.
ausblenden volle Höhe 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
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  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 user profile iconGausi: Delphi-Tags hinzugefügt.
Sprint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 849



BeitragVerfasst: Mi 02.03.05 23:32 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.FormCreate(Sender: TObject);
begin
  Timer1.Interval := 1000;
  Timer1.Enabled := False;
end;

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Shape1.Brush.Color := clRed;
  Timer1.Enabled := True;
end;

ausblenden 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;

_________________
Ciao, Sprint.