Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Brauche Hilfe bei der Stoppuhrformatierung (https://www.delphipraxis.net/151631-brauche-hilfe-bei-der-stoppuhrformatierung.html)

AlexII 25. Mai 2010 22:10


Brauche Hilfe bei der Stoppuhrformatierung
 
Hallo,

bin wieder mal da und hab gleich ein Problem :-D

Ich formatiere in meinem Programm wie folgt eine Stoppuhr:

Delphi-Quellcode:
procedure TForm1.Timer6Timer(Sender: TObject);
begin
if HourOf(Time - StartTimePlay)=0 then
Label6.Caption := FormatDateTime('nn:ss', Time - StartTimePlay) else Label6.Caption := FormatDateTime('hh:nn:ss', Time - StartTimePlay);
end;
Wenn es weniger als eine Stunde ist, werden nur Minuten und Sekunden angezeigt, bei mehr als eine Stunde noch die Stunden dazu. Funktioniert also soweit alles gut. Aber wenn ich z.B die Stoppuhr kurz vor 0:00 Uhr einschalte, es vergehen ein paar Minuten, und es wird 0:00 Uhr spielt die Stoppuhr verrückt. Die Formatierung springt auf hh:nn:ss und auf der Stoppuhr wird 23 Stunden noch was angezeigt. :roteyes:

Kann mir jemand helfen diesen Fehler zu korrigieren? Selber komme ich nicht mehr weiter. Das einzigste was ich rausgefunden habe, dass um 0:00 Uhr die HourOf(Time - StartTimePlay) = 23 ist.

Danke!

H4ndy 25. Mai 2010 22:35

Re: Brauche Hilfe bei der Stoppuhrformatierung
 
Von welchem Typ ist StartTimePlay?
Du kannst auch eine Stoppuhr mit GetTickCount programmieren, die Differenz ist dann in Millisekunden, musst dann nur etwas rumrechnen, hast aber nicht das Problem mit dem Tageswechsel.

idefix2 26. Mai 2010 08:51

Re: Brauche Hilfe bei der Stoppuhrformatierung
 
Kann dierses 23h eventuell durch Rechenungenauigkeiten entstehen, die Komponente arbeitet doch intern mit Gleitkommazahlen?
Versuche einmal, zur aktuellen Zeit prinzipiell z.B. 1ms dazuzurechnen und der Komponente den geringfügig erhöhten Wert füttern.

edit: wird wahrscheinlich auch nichts bringen, ausser dass das Problem eine ms früher auftritt.
Du schreibst 23h noch was - ist das noch was >= 60 Minuten?

AlexII 26. Mai 2010 10:36

Re: Brauche Hilfe bei der Stoppuhrformatierung
 
Zitat:

Zitat von H4ndy
Von welchem Typ ist StartTimePlay?

Delphi-Quellcode:
StartTimePlay: TTime;
Zitat:

Zitat von H4ndy
Du kannst auch eine Stoppuhr mit GetTickCount programmieren, ...

Ich will keine Fremdkomponente verwenden.

DeddyH 26. Mai 2010 10:42

Re: Brauche Hilfe bei der Stoppuhrformatierung
 
MSDN-Library durchsuchenGetTickCount ist keine Komponente, sondern ein API-Befehl.

himitsu 26. Mai 2010 10:43

Re: Brauche Hilfe bei der Stoppuhrformatierung
 
MSDN-Library durchsuchenGetTickCount

Delphi-Referenz durchsuchenTime

Verwende statt Delphi-Referenz durchsuchenTime mal Delphi-Referenz durchsuchenNow, denn dort ist auch noch das Datum enthalten und somit bereiten Tagesübergänge kein Problem mehr.


GetTickCount = Zeit in Millisekunden seit Windowsstart
Now = Zeit in Tagen seit einem bestimmten Datum (Tagesanteile ala Stunden und Minuten stecken im Nachkommaanteil)

Time = Zeit seit Tagesanfang ... also nächster Tag = anderer Ausangspunkt = nicht so leicht verrechenbar, da man selber den Tagesübergang, bzw. die Überänge einrechnen muß.

AlexII 26. Mai 2010 10:56

Re: Brauche Hilfe bei der Stoppuhrformatierung
 
Zitat:

Zitat von himitsu
Verwende statt Delphi-Referenz durchsuchenTime mal Delphi-Referenz durchsuchenNow, denn dort ist auch noch das Datum enthalten und somit bereiten Tagesübergänge kein Problem mehr.

Ja das haut hin, funkt wie Schweizer Uhren. :thumb:

Danke!

AlexII 26. Mai 2010 10:57

Re: Brauche Hilfe bei der Stoppuhrformatierung
 
Zitat:

Zitat von DeddyH
MSDN-Library durchsuchenGetTickCount ist keine Komponente, sondern ein API-Befehl.

Ok :roteyes:


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:11 Uhr.

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