![]() |
Timer mit delay
Hallo,
ich möchte einen Timer so einbauen, dass während der Timer Prozedur eine gewisse Zeit gewartet wird.
Delphi-Quellcode:
Wenn ich die Anwendung so abrufe springt das untere Shape (soll eine Ampel sein, oben ShapeRot, dann ShapeGelb, dann ShapeGruen) direkt auf grün, sprich nur Form1.ShapeGruen.Brush.Color := cllime; wird ausgeführt. Hab ich irgendetwas übersehen warum die anderen beiden Shapes nicht vorher noch eingefärbt werden?
procedure TForm1.Timer1Timer(Sender: TObject);
begin Form1.ShapeRot.Brush.Color := clred; Form1.ShapeGelb.Brush.Color := clyellow; //hier 2 Sekunden warten Form1.ShapeRot.Brush.Color := clwhite; Form1.ShapeGelb.Brush.Color := clwhite; Form1.ShapeGruen.Brush.Color := cllime; end; Und, um auf meine eigentliche Frage zurückzukommen, wie baue ich eine Art Verzögerung bei "//hier 2 Sekunden warten" ein? Habe bereits gesucht, aber unter delay finde ich nichts und sleep friert das ganze ein, aber ich möchte ja nur, so. oben, 2 Sekunden warten! :D Danke und viele Grüße, Zidane |
Re: Timer mit delay
Hi,
ein Delay in einem Timer ist irgendwie unlogisch. Ich würde wohl den Timer auf ein Intervall wie 1 Sek stellen (gehen natürlich auch kleinere), eine Variable hochzählen lassen und so die Wartezeit umsetzen:
Delphi-Quellcode:
inc(CounterVar);
... // bei Intervall 1000 sind das nun 2 Sek if CounterVar = 2 then begin // Code ausführen CounterVar := 0; end; |
Re: Timer mit delay
Zitat:
gruss |
Re: Timer mit delay
@Matze: Danke, klingt gut, aber ich habe mit dem implementieren Probleme.
Hab CounterVar deklariert aber weiß nun nicht genau wo ich das Inc einbinden soll.
Delphi-Quellcode:
@MrKnogge: Wenn alles ausgeführt werden würde könnte man aber bevor ShapeGruen aber lime umgestellt wird die anderen beiden Shapeumänderungen erkennen, oder? :)
var
Form1: TForm1; CounterVar: Integer; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); begin Timer1.Enabled := true; end; procedure TForm1.Timer1Timer(Sender: TObject); begin Inc(CounterVar); end; begin // bei Intervall 1000 sind das nun 2 Sek if CounterVar = 2 then Form1.ShapeRot.Brush.Color := clred; Form1.ShapeGelb.Brush.Color := clyellow; Form1.ShapeRot.Brush.Color := clwhite; Form1.ShapeGelb.Brush.Color := clwhite; Form1.ShapeGruen.Brush.Color := cllime; CounterVar := 0; end; end. Danke, Zidane |
Re: Timer mit delay
Ganz einfach so:
Delphi-Quellcode:
var
Form1: TForm1; CounterVar: Integer = 0; // <= wichtig, initialisieren! implementation {$R *.DFM} procedure TForm1.Timer1Timer(Sender: TObject); begin Inc(CounterVar); // dein normaler Code if CounterVar = 2) then begin // dein verzögerter Code CounterVar := 0; end; end; |
Re: Timer mit delay
Ah ok! :)
Durch CounterVar: Integer = 0; wird der Zähler also auf 0 gesetzt oder? Vielen Dank, wieder was dazu gelernt! ;) |
Re: Timer mit delay
Hallo,
ich denke er meinte es so:
Delphi-Quellcode:
[edit]
procedure TForm1.Button1Click(Sender: TObject);
begin Timer1.Enabled := true; CounterVar := 0; end; //Timer = 1000 procedure TForm1.Timer1Timer(Sender: TObject); begin //nach 1 Sek. Ampel rot If CounterVar = 1 then begin ShapeRot.Brush.Color := clRed; ShapeGelb.Brush.Color := clWhite; ShapeGruen.Brush.Color := clWhite; end; //nach 3 Sek. Ampel rot/gelb If CounterVar = 3 then begin ShapeRot.Brush.Color := clRed; ShapeGelb.Brush.Color := clyellow; ShapeGruen.Brush.Color := clWhite; end; //nach 4 Sek. Ampel grün If CounterVar = 4 then begin ShapeRot.Brush.Color := clWhite; ShapeGelb.Brush.Color := clWhite; ShapeGruen.Brush.Color := clLime; end; //andere Abläufe gleich wie oben.... Inc(CounterVar); end; Wobei es mit Case schöner ausschaut:
Delphi-Quellcode:
case CounterVar of
1: begin //Ampel rot end; 3: begin //Ampel rot/gelb end; 4: begin //Ampel grün end; {...} end; inc(CounterVar) |
Re: Timer mit delay
Zitat:
Du kannst ein sleep(2000) reinpacken(vorsicht, stoppt den gesamten prozess). Andere Möglichkeit: Noch einen timer einbauen, den du startest und der dann auf grün schaltet. |
Re: Timer mit delay
Nun ja, Case ist dann wieder was neues für mich, ich bleib erstmal beim vorherigen! :)
Aber dankeschön, im Nachhinein erscheint das alles immer so logisch! :gruebel: Gracias! :thumb: |
Re: Timer mit delay
case ist realtiv einfach und übersichtlicher.
if a = 2 then .... if a = 3 then .... if a = 4 then .... .... bei 3 if abfragen geht das noch, aber wenn du dann 10 oder 20 hast, wird das sehr unübersichtlich. in solchen fällen nimt man dann case abfragen. ein tipp von mir, schau mal in der delphi hilfe nach und informiere dich dann da über case. so sieht das dann in einer case abfrage aus. case a of 2: .... 3: .... 4: .... .... end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:04 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz