AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Brauche Hilfe bei der Stoppuhrformatierung

Ein Thema von AlexII · begonnen am 25. Mai 2010 · letzter Beitrag vom 26. Mai 2010
Antwort Antwort
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#1

Brauche Hilfe bei der Stoppuhrformatierung

  Alt 25. Mai 2010, 22:10
Hallo,

bin wieder mal da und hab gleich ein Problem

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.

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!
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
Benutzerbild von H4ndy
H4ndy

Registriert seit: 28. Jun 2003
Ort: Chemnitz
515 Beiträge
 
Delphi XE3 Professional
 
#2

Re: Brauche Hilfe bei der Stoppuhrformatierung

  Alt 25. Mai 2010, 22:35
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.
Manuel
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#3

Re: Brauche Hilfe bei der Stoppuhrformatierung

  Alt 26. Mai 2010, 08:51
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?
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#4

Re: Brauche Hilfe bei der Stoppuhrformatierung

  Alt 26. Mai 2010, 10:36
Zitat von H4ndy:
Von welchem Typ ist StartTimePlay?
StartTimePlay: TTime;
Zitat von H4ndy:
Du kannst auch eine Stoppuhr mit GetTickCount programmieren, ...
Ich will keine Fremdkomponente verwenden.
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.539 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Brauche Hilfe bei der Stoppuhrformatierung

  Alt 26. Mai 2010, 10:42
MSDN-Library durchsuchenGetTickCount ist keine Komponente, sondern ein API-Befehl.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.121 Beiträge
 
Delphi 12 Athens
 
#6

Re: Brauche Hilfe bei der Stoppuhrformatierung

  Alt 26. Mai 2010, 10:43
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ß.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#7

Re: Brauche Hilfe bei der Stoppuhrformatierung

  Alt 26. Mai 2010, 10:56
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.

Danke!
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#8

Re: Brauche Hilfe bei der Stoppuhrformatierung

  Alt 26. Mai 2010, 10:57
Zitat von DeddyH:
MSDN-Library durchsuchenGetTickCount ist keine Komponente, sondern ein API-Befehl.
Ok
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:14 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