Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Timer zählt +2 anstatt +1??? (https://www.delphipraxis.net/95177-timer-zaehlt-2-anstatt-1-a.html)

Overclocker 2. Jul 2007 18:04


Timer zählt +2 anstatt +1???
 
Hallo,

ich habe folgendes Problem.
Beim Drücken eines Buttons möchte ich, dass in einem Edit Feld die Zeit in Sekunden hochgezählt wird, das heißt es soll langsam von 0 aus an immer nach 1 Sekunde + 1 dazu zählen.
Hier mein Code:

Delphi-Quellcode:
timer1.enabled := true;
start := 0;



end;

procedure TForm1.Timer1Timer(Sender: TObject);

begin
start := start+1;
form2.edit3.text := FloatToStr(start);
end;
Der Timer ist auf ein Intervall von 1000 (also 1 Sekunde) eingestellt, doch wenn ich das Programm laufen lasse, zählt er mir jede Sekunde immer +2 dazu und ich finde den Grund nicht.
Zudem würde ich gerne wissen, wie ich dann einstellen kann, dass es bei 60 Sekunden dann 1 Minute anzeigt und nach 60 Minuten dann 1 Stunde usw. (also 16:30:10... 16:30:11...16:30:12 usw.)

Kann mir da jemand helfen, wäre super!!!

Grüße

shmia 2. Jul 2007 18:12

Re: Timer zählt +2 anstatt +1???
 
Du darfst nicht die Zeit mit einem Timer aufaddieren, denn die Timerungenauigkeiten addieren sich im Laufe der Zeit zu grossen Beträgen. (5 Min pro Stunde gut möglich)
Besser Startzeit merken und die Differenz anzeigen:
Delphi-Quellcode:
var
   StartZeit : TDateTime; // am Besten im private-Abschnitt der Klasse TForm1 ablegen
...
   StartZeit := Now;
end;
...
procedure TForm1.Timer1Timer(Sender: TObject);
begin
   form2.edit3.text := TimeToStr(Now- Startzeit);
end;
Das Timer-Interval hat so keinen Einfluss auf die Genauigkeit der Anzeige.
Bei Timer-Interval von 5000 wird die Anzeige halt nur alle 5s aktualisiert.

3_of_8 2. Jul 2007 18:14

Re: Timer zählt +2 anstatt +1???
 
+2? :shock:

Bist du dir sicher? Das kann ich mir überhaupt nicht erklären.

Das andere geht übrigens so:

Delphi-Quellcode:
var s, m, h: Integer;

//...

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  inc(s); //oder s:=s+1;
  if s>=60 then
  begin
    inc(m);
    s:=0;
  end;
  if m>=60 then
  begin
    inc(h);
    m:=0;
  end;

  //Hier dann wieder das Edit-Feld:
  form2.edit1:=inttostr(h)+':'+inttostr(m)+':'+inttostr(s);
end;
EDIT: @shmia: Das stimmt natürlich, darauf sollte man achten.
Man deklariert noch eine Variable start, und weißt der am Anfang den Wert von GetTickCount() zu.

Die Timer-Methode geht dann wieder so:

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var diff: Integer;
begin
  diff:=GetTickCount-start;
  h:=diff div 60;
  diff:=diff mod 60;
  m:=diff div 60;
  s:=diff mod 60;
 
  form2.edit1:=inttostr(h)+':'+inttostr(m)+':'+inttostr(s);
end;

Khabarakh 2. Jul 2007 18:42

Re: Timer zählt +2 anstatt +1???
 
Wozu denn dieses Ticks-Integer-div-mod-Gemurkse, wenn es so elegante Wege wie den von shmia gibt :gruebel: ?

Overclocker 2. Jul 2007 19:46

Re: Timer zählt +2 anstatt +1???
 
@shmia: super funktioniert einwandfrei :)

habt mir sehr geholfen danke, jetzt werd ich mich noch daran setzen nen button einzufügen wo man die "stoppuhr" anhalten kann und bei einem klicken auf nen anderen Button die Zeit wieder weiterlaufen lassen kann :)

Falls mein Projekt fertig ist setz ich es natürlich sofort hier rein :)

Grüße

marabu 2. Jul 2007 20:35

Re: Timer zählt +2 anstatt +1???
 
Hallo,

damit die Anzeige einigermaßen synchron zum Takt der Systemuhr läuft, kann man das Interval korrigieren: klick

Grüße vom marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:33 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