Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Stopuhr programmieren (https://www.delphipraxis.net/2778-stopuhr-programmieren.html)

flodeluxe 6. Feb 2003 14:07


Stopuhr programmieren
 
Hi
Wie kann ich eine Stopuhr programmieren?
Mit einer Time-Komponente?
P.S. Ich hab schon in der Hilfe geschaut :mrgreen:
mfg Flo

CalganX 6. Feb 2003 14:17

Stelle Timer.Interval auf die Anzahl der Milisekunden ein, die du haben willst und schreibe in Timer.OnTimer rein, was passieren soll, wenn er fertig hat. :roll:
Denk dran: sobald Timer.enabled = true, dann fängt er an herunterzuzählen...

Chris

Sharky 6. Feb 2003 14:23

Re: Stopuhr programmieren
 
Zitat:

Zitat von flodeluxe
Hi
Wie kann ich eine Stopuhr programmieren?
Mit einer Time-Komponente?
P.S. Ich hab schon in der Hilfe geschaut :mrgreen:
mfg Flo

Schaue mal nach GetTickCount


Als Code sehe das dann so aus:

Delphi-Quellcode:
var
   startzeit,
   endzeit : Cardinal;

procedure TForm1.Button1Click(Sender: TObject);
begin
 If (Button1.Caption = 'Start') then
  begin
   startzeit := GetTickCount;
   Button1.Caption := 'Stop';
   label1.Caption := 'Uhr läuft';
  end
 else
  begin
   endzeit := GetTickCount;
   label1.Caption := Format ('Die Stopuhr lief %d ms.',[endzeit-startzeit]);
   Button1.Caption := 'Start';
  end;
end;
Benötigt wird 1 Button mit der Caption 'Start' und ein Label.

oki 6. Feb 2003 17:18

Hallo,

noch ein kurzer Tipp hierzu. Ich habe dieses Problem auch schon lösen müssen und dabei folgende Probleme festgestellt:

Stellst du den Timer auf eine Sekunde ein (z.B. um einen sichtbaren Countdown darzustellen) wird deine OnTimer-Methode alle Sekunde einmal aufgerufen. Zähle dann nicht einfach die Aufrufe durch um deine Endzeit zu ermitteln, sondern prüfe die tatsächlich abgelaufene Zeit (hier ist nämlich GetTickCount hilfreich). Die Abarbeitung des OnTimer-Ereignisses benötigt auch Task-Zeit die immer noch dazukommt (ist der Processor arg beschäftigt kommt da ganz schön was zusammen). Bei längeren Countdowns macht das auch mal mehrere Sekunden aus.

Also, denk daran oder Dein Countdown darf ungenau sein.

Gruß oki

nailor 6. Feb 2003 17:24

die globale Variable "Endzeit" braucht man gar nicht, oder wenn, dann nur lokal...

CalganX 6. Feb 2003 17:43

@oki: dann muss man einfach Timer.Enabled auf false stellen, dann wird nicht jede Minute nocheinmal wieder holt... Allerdings kann ich nur sehr Sharky's Methode empfehlen, da diese deutlich besser ist und ich dich falsch verstanden habe.

Chris

flodeluxe 7. Feb 2003 18:09

DANKE
 
Hi
Ok, ich hatte bis jetzt noch keinen Zeit, aber ich werde es gleich mal probieren! :bounce1:

oki 12. Feb 2003 16:54

Hallo chakotay,

ja, ja, genau da steckt das Problem. Wenn Du den Timer anhälst um Code zu verarbeiten vergeht auch Zeit! Dann passiert praktisch folgendes:
Timer läuft eine Sekunde -> angehalten -> Code wird z.B. 100ms bearbeitet -> Timer start -> läuft eine Sekunde ..... usw.
Seit Begin des ersten Starts sind zum zweiten Neustart aber schon 1,1 Sekunden vergangen! So geht das immer weiter.
In meinem Beispiel hast Du also nach 10 Starts nicht 10 sondern 11 Sekunden hinter dier.

Das hört sich alles recht einfach an. Wenn man das jetzt sieht sagt jeder "Sowas blöd, weiß man doch".

Wenn mans das erste mal macht hauts einem aber aus Erfahrung immer genau an so einfachen Stellen die Füße weg.

Gut, das dazu

Gruß oki

Sertrain 19. Jan 2011 12:24

AW: Stopuhr programmieren
 
Auch wenn das Thema eingestaubt ist brauche ich es gerade. Wie lass ich mir nicht die Millisekunden anzeigen, sondern die Sekunden plus Millisekunden. Also zB: 1,34 sekunden.

DeddyH 19. Jan 2011 12:27

AW: Stopuhr programmieren
 
Delphi-Quellcode:
label1.Caption := Format ('Die Stopuhr lief %.2f s.',[(endzeit-startzeit) / 1000]);


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