Autor Beitrag
David Armstrong
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19

Win XP
Delphi 7
BeitragVerfasst: Di 28.03.06 12:55 
hi,wir sollen eine ampelanlage in delhpi machen,die soll folgend aufgebaut sein:

eine straße auf der links eine ampel und in der mitte ein hindernis sein um das herum warnleuchten stehen

die ampel soll in einem bestimmten rhytmus wechseln:
-z.b. 30 sekunden grün,dann 1 sekunde gelb,dann 30 sekunden rot,1 sekunde gelb und wieder 30 sekunden grün...

die warnleuchten sollen auch in einem bestimmten rhytmus zwischen 2 farben wechseln

meine frage:
wie macht man das?
ich dachte man würde shape.brush.color benutzen wobei ich da nicht weiß wie man da die farbe auswählt und wie man den rhytmus eingibt(vielleicht mit einem timer)?

müsste man 3 shape felder für die ampel nehmen(daher für jede farbe eine) oder nur eins?

freue mich auf tipps und hilfe :D
fly_2000
Hält's aus hier
Beiträge: 13

XP-Pro

BeitragVerfasst: Di 28.03.06 13:19 
Hallo,
also ich würde an deiner stelle auf jeden fall wegen der optik schon drei shapes nehmen, welchen du die farben dann zuordnest.
für dein programm brauchst du endweder 2 timer, einen mit 30s und einen mit 1s. oder du benutzt nur einen mit 1s und zählst eine variable hoch bis 30ig. wenn ich heute noch zeit habe schreib ich nen quelltext..
Mfg
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Di 28.03.06 13:48 
hallo,

ich würde an deiner stelle 3 shapes mit festgelegten farben (rot, gelb, grün) verwenden.
farben legts du am besten im OI an, um die übersicht im quelltext zu waren :roll:
Damit die "Ampel" auch umspringt, würde ich einfache if-Abfragen verwenden, s. quellcode.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
var time: byte;
begin
 time := time + 1;

 if time > 61 then
     time := 0;

 if time <= 30 then
    begin
     shape1.Visible := true;
     ....

so könnte der anfang deiner prozedur aussehen ;)
fly_2000
Hält's aus hier
Beiträge: 13

XP-Pro

BeitragVerfasst: Di 28.03.06 13:54 
Der timer 2 ruft als ontimer ereignis die procedur button1click auf, und ist auf 1000ms eingestell.. zusätzlich noch die var merker: integer; eintragen!

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:
procedure TForm1.Button1Click(Sender: TObject);
begin
merker:= merker+1;
form1.Timer2.Enabled:=true;
        if merker= 1 then
        begin
        form1.Shape1.Brush.Color := clred;
        end;
                if merker= 11 then
                begin
                form1.Shape2.Brush.Color := clyellow;
                end;
        if merker= 14 then
        begin
        form1.Shape3.Brush.Color := clgreen;
        form1.Shape2.Brush.Color := clwindow;
        form1.Shape1.Brush.Color := clwindow;
        end;
                if merker= 24 then
                begin
                form1.Shape3.Brush.Color := clwindow;
                form1.Shape2.Brush.Color := clyellow;
                end;
        if merker= 26 then
        begin
        form1.Shape2.Brush.Color := clwindow;
        form1.Shape1.Brush.Color := clred;
        merker:= 0;
        end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
form1.Timer2.Enabled:= false;
form1.Shape1.Brush.Color:= clwindow;
form1.Shape2.Brush.Color:= clwindow;
form1.Shape3.Brush.Color:= clwindow;
merker:= 0;
end;


Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt
David Armstrong Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19

Win XP
Delphi 7
BeitragVerfasst: Mi 29.03.06 19:37 
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:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, Buttons, StdCtrls;

type
  TForm1 = class(TForm)
    SpeedButton1: TSpeedButton;
    SpeedButton2: TSpeedButton;
    SpeedButton3: TSpeedButton;
    Shape1: TShape;
    Shape2: TShape;
    Shape3: TShape;
    Button1: TButton;
    Timer1: TTimer;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


procedure TForm1.Button1Click(Sender: TObject);
var merker:integer;
begin
merker:= merker+1;  
form1.Timer1.Enabled:=true  ;
if merker = 1 then
        begin  
        form1.Shape1.Brush.Color := clred;  
        end;  
                if merker= 11 then  
                begin  
                form1.Shape2.Brush.Color := clyellow;  
                end;  
        if merker= 14 then  
        begin
        form1.Shape3.Brush.Color := clgreen;  
        form1.Shape2.Brush.Color := clwindow;  
        form1.Shape1.Brush.Color := clwindow;  
        end;  
                if merker= 24 then  
                begin  
                form1.Shape3.Brush.Color := clwindow;  
                form1.Shape2.Brush.Color := clyellow;
                end;
        if merker= 26 then
        begin
        form1.Shape2.Brush.Color := clwindow;
        form1.Shape1.Brush.Color := clred;
        merker:= 0;
        end;  
end;

 
procedure TForm1.Button2Click(Sender: TObject);
var merker:integer;
begin
form1.Timer1.Enabled:= false;
form1.Shape1.Brush.Color:= clwindow;
form1.Shape2.Brush.Color:= clwindow;
form1.Shape3.Brush.Color:= clwindow;
merker:= 0;
end;

end.



also wenn ich starte wird zwar kein fehler angezeigt aber wenn ich button 1 oder 2 clicke passiert nix :oops:
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Mi 29.03.06 19:58 
diese code gehört ja auch in die timerprozedur!
ausblenden 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:
var merker:integer;
begin
merker:= merker+1;  
form1.Timer1.Enabled:=true  ;
if merker = 1 then
        begin  
        form1.Shape1.Brush.Color := clred;  
        end;  
                if merker= 11 then  
                begin  
                form1.Shape2.Brush.Color := clyellow;  
                end;  
        if merker= 14 then  
        begin
        form1.Shape3.Brush.Color := clgreen;  
        form1.Shape2.Brush.Color := clwindow;  
        form1.Shape1.Brush.Color := clwindow;  
        end;  
                if merker= 24 then  
                begin  
                form1.Shape3.Brush.Color := clwindow;  
                form1.Shape2.Brush.Color := clyellow;
                end;
        if merker= 26 then
        begin
        form1.Shape2.Brush.Color := clwindow;
        form1.Shape1.Brush.Color := clred;
        merker:= 0;
        end;  
end;


mfg ;)
David Armstrong Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19

Win XP
Delphi 7
BeitragVerfasst: Mi 29.03.06 20:05 
ahhh^^ danke,kannste in 20min hier nochma vorbeischauen? falls ich immernoch probleme habe sage ich sie dir;)
David Armstrong Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19

Win XP
Delphi 7
BeitragVerfasst: Mi 29.03.06 20:30 
ich habs jetz so gemacht wie du meintest,starten tuts,aber passiern tut nix^^
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:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, Buttons, StdCtrls;

type
  TForm1 = class(TForm)
    SpeedButton1: TSpeedButton;
    SpeedButton2: TSpeedButton;
    SpeedButton3: TSpeedButton;
    Button1: TButton;
    Button2: TButton;
    Timer1: TTimer;
    Shape1: TShape;
    Shape2: TShape;
    Shape3: TShape;
    procedure Timer1Timer(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
var merker:integer;
begin  
merker:= merker+1;
form1.Timer1.Enabled:=true  ;  
if merker = 1 then  
        begin
        form1.Shape1.Brush.Color := clred;    
        end;    
                if merker= 11 then    
                begin    
                form1.Shape2.Brush.Color := clyellow;    
                end;
        if merker= 14 then
        begin  
        form1.Shape3.Brush.Color := clgreen;    
        form1.Shape2.Brush.Color := clwindow;    
        form1.Shape1.Brush.Color := clwindow;    
        end;
                if merker= 24 then    
                begin    
                form1.Shape3.Brush.Color := clwindow;    
                form1.Shape2.Brush.Color := clyellow;  
                end;  
        if merker= 26 then
        begin  
        form1.Shape2.Brush.Color := clwindow;  
        form1.Shape1.Brush.Color := clred;
        merker:= 0;
        end;
end;


procedure TForm1.Button2Click(Sender: TObject);
var merker:integer;
begin
form1.Timer1.Enabled:= false;
form1.Shape1.Brush.Color:= clwindow;
form1.Shape2.Brush.Color:= clwindow;  
form1.Shape3.Brush.Color:= clwindow;
merker:= 0;  
end;


end.
Miri
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 657


Delphi 3 Prof., Delphi 2005 PE
BeitragVerfasst: Mi 29.03.06 20:52 
Du musst schon beim Button1 auch den Timer starten... wenn du den nicht startest, kann ja auch nix passieren...
David Armstrong Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19

Win XP
Delphi 7
BeitragVerfasst: Mi 29.03.06 21:14 
und wie startet man den??
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Mi 29.03.06 21:32 
mit Button 1. (Timer1.Enabled := true)
PS: deklariere "merker" global und nicht in der Timer Prozedur, denn so machts keinen Sinn, da sonst merker immer =1 ist...

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
fly_2000
Hält's aus hier
Beiträge: 13

XP-Pro

BeitragVerfasst: Mi 29.03.06 21:35 
gude,
also nimm den quelltext so wie ich dir den geschrieben hab.
dann musst du noch bei variablen
var
merker: integer;
hinschreiben.
beim timer stellst du den enable auf false im objektinspektor, und tust bei ereignisse im ontimer ereignis Button1click wählen.
dann müsste es fun funktionieren
Mfg
David Armstrong Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19

Win XP
Delphi 7
BeitragVerfasst: Mi 29.03.06 21:36 
muhaha danke!!! kann ich dir nen orden oder ne bewertung geben???
wie kann ich es jetz noch machen das es bei der ampel nicht so ist: grün - gelb - rot - grün... sondern grün - gelb - rot - gelb - grün...?
fly_2000
Hält's aus hier
Beiträge: 13

XP-Pro

BeitragVerfasst: Mi 29.03.06 21:39 
achso.. den merker global deklarieren, also oben wo var steht, unter implementation nicht innerhalb der proceduren..
fly_2000
Hält's aus hier
Beiträge: 13

XP-Pro

BeitragVerfasst: Mi 29.03.06 21:48 
du kannst einfach die farben so ändern wie du lust hast, und genauso die zeitabstände
wenn du merker= 11 abfragst, dann wird dieser schritt nach 11sekunden durchlaufen, wenn du merker= 20 schreibst nach 20 sekunden, du kannst auch noch beliebig viele 'if then' anweisungen dazwischenmachen, bzw rauslöschen, du musst nur beim letzten den merker wieder auf null setzen, bzw wenn du den ablauf dann stoppen willst den Timer.enable auf false setzen
Miri
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 657


Delphi 3 Prof., Delphi 2005 PE
BeitragVerfasst: Do 30.03.06 07:37 
Nur mal so nebenbei... wär dann nicht grün - gelb - rot - rot/gelb - grün noch besser? ;)
David Armstrong Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19

Win XP
Delphi 7
BeitragVerfasst: Fr 31.03.06 19:22 
ja,hab ich jetz auch so gemacht^^
aber trotzdem danke das mir so viele geholfen haben :)