Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Timer (https://www.delphipraxis.net/98370-timer.html)

Ersan90 26. Aug 2007 10:49


Timer
 
Hey leuts,

Ich will eine Ampel erstellen die z.B. automatisch bei

1 sec auf gelb

1,5 sec auf grün

schaltet..

Also Timer1. ... Wenns geht mit case .. of

Ist wahrscheinlich einfach aber ich komm grad net drauf :cry:

Danke im Voraus.
MFG Ersan

Apollonius 26. Aug 2007 11:00

Re: Timer
 
Globale Variable. Intervall des Timers auf 500, dort die Variable hochzählen und mit case-of Farbe bestimmen. Das schaffst du.

Luckie 26. Aug 2007 11:06

Re: Timer
 
Delphi-Quellcode:
type
  TAmpelPhase = (
    apRot = 0,
    apRotGelb = 1,
    apGelb = 2,
    apGruen = 3);

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
    AktuelleAP: TAmpelPhase;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  AktuelleAP := apRot;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  case AktuelleAP of
    apRot:
    begin
      Caption := 'Rot';
      AktuelleAP := apRotGelb;
    end;
    apRotGelb:
    begin
      Caption := 'RotGelb';
      AktuelleAP := apGruen;
    end;
    apGelb:
    begin
      Caption := 'Gelb';
      AktuelleAP := apRot;
    end;
    apGruen:
    begin
      Caption := 'Grün';
      AktuelleAP := apGelb;
    end;
  end;
end;
Die Farbe wird in der Titelzeile des Fensters als Zeichenkette angezeigt. Ich habe auch gleich noch die rot-gelb Phase mit eingebaut, wie es in der Wirklichkeit auch ist.

Ersan90 26. Aug 2007 11:09

Re: Timer
 
thx aber was wäre denn der befehl für zB " bei 10 passiert dies und das"

case timer1.interval of 10 :
...

da passiert bei mir aber nichts, denn bei dem object inspector ist das interval auf 1000 und nur auf 1000 klappt es also

case timer1.interval of 1000 :
...

Luckie 26. Aug 2007 11:14

Re: Timer
 
Was hat denn das Intervall des Timers mit der Ampelphase zu tun? Entscheident ist doch nur, was für eine Phase gerade angezeigt wird, um zu bestimmen, welche als nächstes kommt.

Ersan90 26. Aug 2007 11:16

Re: Timer
 
Zitat:

Zitat von Luckie
Delphi-Quellcode:
type
  TAmpelPhase = (
    apRot = 0,
    apRotGelb = 1,
    apGelb = 2,
    apGruen = 3);

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
    AktuelleAP: TAmpelPhase;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  AktuelleAP := apRot;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  case AktuelleAP of
    apRot:
    begin
      Caption := 'Rot';
      AktuelleAP := apRotGelb;
    end;
    apRotGelb:
    begin
      Caption := 'RotGelb';
      AktuelleAP := apGruen;
    end;
    apGelb:
    begin
      Caption := 'Gelb';
      AktuelleAP := apRot;
    end;
    apGruen:
    begin
      Caption := 'Grün';
      AktuelleAP := apGelb;
    end;
  end;
end;
Die Farbe wird in der Titelzeile des Fensters als Zeichenkette angezeigt. Ich habe auch gleich noch die rot-gelb Phase mit eingebaut, wie es in der Wirklichkeit auch ist.


ok thx :shock: das muss ich jez erstmal verstehen

Luckie 26. Aug 2007 11:18

Re: Timer
 
Da gibt es nichts zu verstehen. Du könntest das ganze auch mit einem einfachen Integer machen. Mache ich eigentlich auch, nur, das sich mir eben die einzelnen Werte "benannt" habe mit einem eigenen Aufzählungsdatentypen, um es etwas übersichtlicher und einfachher zu machen.

Ersan90 26. Aug 2007 11:18

Re: Timer
 
Zitat:

Zitat von Luckie
Was hat denn das Intervall des Timers mit der Ampelphase zu tun? Entscheident ist doch nur, was für eine Phase gerade angezeigt wird, um zu bestimmen, welche als nächstes kommt.

Ich wusste es ya net :?

aber ok also hat nix damit zu tun.

Ersan90 26. Aug 2007 11:19

Re: Timer
 
Zitat:

Zitat von Luckie
Da gibt es nichts zu verstehen. Du könntest das ganze auch mit einem einfachen Integer machen. Mache ich eigentlich auch, nur, das sich mir eben die einzelnen Werte "benannt" habe mit einem eigenen Aufzählungsdatentypen, um es etwas übersichtlicher und einfachher zu machen.

aso okok verstehe :idea:

Luckie 26. Aug 2007 11:24

Re: Timer
 
Aber noch mal zur Erklärung:

Wenn die Ampel rot ist (das ist der Startwert), dann wird rot angezeigt und für den nächsten Aufruf der Timer-Prozedur der Wert der Variablen AktuelleaP auf rot-gelb gesetzt, weil das die Phase ist, die nach rot kommt. Da die Variable beim nächtsen mal rot-gelb ist, springt er in den rot-gelb Zweig. Dort wird dan der Wert auf die nächste Ampelpahe gesetzt, die folgen soll.

Ich hoffe, dass kanst du auch morgen deinem Lehrer erklären. ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:13 Uhr.
Seite 1 von 2  1 2      

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