Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Kreuzung - Timer funktioniert nicht (https://www.delphipraxis.net/142839-kreuzung-timer-funktioniert-nicht.html)

Ghostleader 5. Nov 2009 13:53

Re: Kreuzung - Timer funktioniert nicht
 
Ja das ist verständlich. Nur hab ich noch nie was mit "case" und anderen Dingen gemacht. Aber danke trotzdem!

Ghostleader 7. Nov 2009 18:37

Re: Kreuzung - Timer funktioniert nicht
 
Folgendes Problem:
Die Ampel schalltet nicht wie sie soll sondern so:
Rot, Gelb, Gelbrot, Grün

Ich finde meinen Fehler nicht, bitte helft mir:

Delphi-Quellcode:
   
if ImAmpel1Ro.Visible = True then
    begin
      ImAmpel1Ro.Visible:= False;
      ImAmpel1Gero.Visible:= True;
    end
  else if ImAmpel1Gero.Visible = True then
    begin
      ImAmpel1Gero.Visible:= False;
      ImAmpel1Gr.Visible:= True;
    end
  else if ImAmpel1Gr.Visible = True then
    begin
      ImAmpel1Gr.Visible:= False;
      ImAmpel1Ge.Visible:= True;
    end
  else if ImAmpel1Ge.Visible = True then
    begin
      ImAmpel1Ge.Visible:= False;
      ImAmpel1Ro.Visible:= True;
    end;
Ich habe NUR noch das Problem mit der Reihenfolge und ignoriere eure Tipps auch NICHT.

markus5766h 7. Nov 2009 19:07

Re: Kreuzung - Timer funktioniert nicht
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

vielleicht auch so (siehe Anhang, *.exe und Quelldateien) ?

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Timer1: TTimer;
    Prot: TPanel;
    Pgelb: TPanel;
    Pgruen: TPanel;
    Edit1: TEdit;
    Prot2: TPanel;
    Pgelb2: TPanel;
    Pgruen2: TPanel;
    Label1: TLabel;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure ShowAmpel(Sender: TObject);
  private
    { Private declarations }
    phase, phase2 : Integer;
    counter : Integer;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
counter := 0;
phase := 0;
Prot.Visible := False;
Pgelb.Visible := False;
Pgruen.Visible := False;
Prot2.Visible := False;
Pgelb2.Visible := False;
Pgruen2.Visible := False;
Edit1.Text := '';
Timer1.Enabled := True;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Timer1.Enabled := False;
Edit1.Text := '';
Prot.Visible := False;
Pgelb.Visible := False;
Pgruen.Visible := False;
Prot2.Visible := False;
Pgelb2.Visible := False;
Pgruen2.Visible := False;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
counter := counter + 1; //Sekunden
 case counter of
  0..5   : phase := 1; // Rot
  6..10  : phase := 2; // Rot-Gelb
  11..15 : phase := 3; // Gruen
  16..20 : phase := 4; // Gruen
  21..25 : phase := 5; // Gelb
  26..29 : phase := 6; // Rot
  30     : begin
            phase := 6;
            counter := 0;
           end;
 end; // end case of
 if (phase + 3) > 6 then phase2 := phase -3 else phase2 := phase +3;
 Edit1.Text := 'Phase : '+IntToStr(phase);
 ShowAmpel(Self);
end;

procedure TForm1.ShowAmpel(Sender: TObject);
begin
 case phase of
  1 : begin Prot.Visible := True; end;
  2 : begin Prot.Visible := True; Pgelb.Visible := True; end;
  3 : begin Prot.Visible := False; Pgelb.Visible := False; Pgruen.Visible := True; end;
  4 : begin Prot.Visible := False; Pgelb.Visible := False; Pgruen.Visible := True; end;
  5 : begin Pgruen.Visible := False; Pgelb.Visible := True; end;
  6 : begin Pgelb.Visible := False; Prot.Visible := True; end;
 end; // end case of
 case phase2 of
  1 : begin Prot2.Visible := True; end;
  2 : begin Prot2.Visible := True; Pgelb2.Visible := True; end;
  3 : begin Prot2.Visible := False; Pgelb2.Visible := False; Pgruen2.Visible := True; end;
  4 : begin Prot2.Visible := False; Pgelb2.Visible := False; Pgruen2.Visible := True; end;
  5 : begin Pgruen2.Visible := False; Pgelb2.Visible := True; end;
  6 : begin Pgelb2.Visible := False; Prot2.Visible := True; end;
 end; // end case of
end;

end.
... ist mit Sicherheit noch optimierungsfähig (nur 'mal so eben schnell "zusammengeschustert")

Ghostleader 7. Nov 2009 19:49

Re: Kreuzung - Timer funktioniert nicht
 
danke für deine antwort aber ich wüde gerne wissen wieso die ampel in der falschen reihenfolge schaltet... damit ich was lernen und es ändern kann.
mfg ghost

Teekeks 7. Nov 2009 21:41

Re: Kreuzung - Timer funktioniert nicht
 
Zitat:

Zitat von Ghostleader
Folgendes Problem:
Die Ampel schalltet nicht wie sie soll sondern so:
Rot, Gelb, Gelbrot, Grün

Hast du evtl. die Bezeichnungen vertauscht?
Achso: und bitte keinen Vergleich auf true, also bitte das so machen:
Delphi-Quellcode:
   
if ImAmpel1Ro.Visible{ = True} then
    begin
      ImAmpel1Ro.Visible:= False;
      ImAmpel1Gero.Visible:= True;
    end
  else if ImAmpel1Gero.Visible{ = True} then
    begin
      ImAmpel1Gero.Visible:= False;
      ImAmpel1Gr.Visible:= True;
    end
  else if ImAmpel1Gr.Visible{ = True} then
    begin
      ImAmpel1Gr.Visible:= False;
      ImAmpel1Ge.Visible:= True;
    end
  else if ImAmpel1Ge.Visible{ = True} then
    begin
      ImAmpel1Ge.Visible:= False;
      ImAmpel1Ro.Visible:= True;
    end;

Ghostleader 7. Nov 2009 21:46

Re: Kreuzung - Timer funktioniert nicht
 
nein soweit ich das sehe habe ich nichts vertauscht

Ghostleader 7. Nov 2009 21:49

Re: Kreuzung - Timer funktioniert nicht
 
hat sich erledigt habe den fehler jetzt ENDLICH gefunden ;) danke für die hilfe mfg Ghost

Matze 7. Nov 2009 21:53

Re: Kreuzung - Timer funktioniert nicht
 
Zitat:

Zitat von Ghostleader
hat mir schonmal jemand gesagt aber:
wieso?

Zitat:

Zitat von Matze

Und jetzt schreibe bitte nicht wieder du hättest alles hier genau gelesen. Wie du siehst, hast du es nicht. Klicke den Link an und lies, was dort steht, dann weißt du wieso.

Micha88 12. Nov 2009 07:21

Re: Kreuzung - Timer funktioniert nicht
 
Du solltest dir vielleicht nochmal die Delphi-GRUNDlagen ansehen, bevor du loslegst.

Wir sehen ja,. dass du keine Tipps annimst und selbst nach dem X-Ten Mal noch auf True/False vergleichst!


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:18 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz