![]() |
Timer Verständnisfrage
Hi,
Ich benutze in meinem Projekt einen Timer mit einem Intervall von 100ms. Warume werden die einzelnen case-Anweisungen nicht durchlaufen? Warum funktioniert folgender Code nicht?
Delphi-Quellcode:
Gruss Alois ;)
procedure TForm1.Timer1Timer(Sender: TObject);
var Interval: integer; begin if Interval > 10 then Interval := 1; case Interval of 2, 4, 6, 8 : begin // alle 200ms end; 5: begin // alle 500ms end; 10 : begin // alle 1000ms end; end; Interval := Interval + 1; end; |
Re: Timer Verständnisfrage
Weil Interval bei dir eine lokale Variable ist.
|
Re: Timer Verständnisfrage
Zitat:
Ich habs zum besseren Verständnis hier nochmal geändert:
Delphi-Quellcode:
Timer1.Interval ist im Design-Form auf 100 eingestellt und der der Timer wird mit Timer1.Enabled = true auch gestartet.
procedure TForm1.Timer1Timer(Sender: TObject);
var ZeitInterval: integer; begin if ZeitInterval > 10 then ZeitInterval := 1; case ZeitInterval of 2, 4, 6, 8 : begin // alle 200ms end; 5: begin // alle 500ms end; 10 : begin // alle 1000ms end; end; ZeitInterval := ZeitInterval + 1; Der Wert ZeitInterval wird als Zähler benutzt, aber die einzelnen case-Abschnitte werden nicht durchlaufen. Gruss Alois ;) |
Re: Timer Verständnisfrage
Was omata meinte ist, dass lokale Variablen nicht initialisiert werden, Du also nicht wissen kannst, was dort drin steht.
|
Re: Timer Verständnisfrage
.. wenn Du die lokale Variable hochzählst bringt das nicht viel.
Sie ist bei Dir jedesmal wenn die Timerfunktion ausgeführt wird undefiniert. Eine externe Variable ( Klassen variable) würde Dir hier helfen. Grüße Klaus |
Re: Timer Verständnisfrage
Genau, die lokale Variable lebt nur so lange wie die Timer-Prozedur ausgeführt wird, wird sie ein zweites Mal aufgerufen ist das eine neue lokale Variable und sie enthält nicht den Wert, den du ihr zuvor mal zugewiesen hast.
|
Re: Timer Verständnisfrage
Zitat:
Gruss Alois ;) |
Re: Timer Verständnisfrage
Auf gut Deutsch
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var ZeitInterval: integer; begin // ZeitInterval ist hier an der Stelle 0 if ZeitInterval > 10 then ZeitInterval := 1; case ZeitInterval of 2, 4, 6, 8 : begin // alle 200ms end; 5: begin // alle 500ms end; 10 : begin // alle 1000ms end; end; ZeitInterval := ZeitInterval + 1; |
Re: Timer Verständnisfrage
Eine nicht initialisierte Variable ist nicht Null, sie ist undefiniert.
|
Re: Timer Verständnisfrage
Zitat:
lokale Variablen werden nicht intitialisiert Was man hier auch verwenden könnte, das wäre .Tag [add]
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin if Timer1.Tag > 10 then Timer1.Tag := 1; case Timer1.Tag of ... end; Timer1.Tag := Timer1.Tag + 1; end; // oder besser (dieses ist unabhängig vom Timer-Namen) procedure TForm1.Timer1Timer(Sender: TObject); begin if TTimer(Sender).Tag > 10 then TTimer(Sender).Tag := 1; case TTimer(Sender).Tag of ... end; TTimer(Sender).Tag := TTimer(Sender).Tag + 1; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:44 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-2025 by Thomas Breitkreuz