![]() |
Countdown
Ich bin gerade dabei ein kleines Countdown-Programm zu schreiben,
welcher jede Sekunde die Differenz zwischen, DateTime(now) und den in einer StringGrid aufgelisteten Daten, sprich ZielDatum und ZielUhrzeit, berechnet und dann das Ergebnis in 4 Labels à tage, stunden, minuten, sekunden ausgibt. Meine Problem: Ich glaube, ich habe das Ganze viel zu umständlich gemacht (knapp 80 Zeilen). -> er schafft es nicht, die Berechnung wirklich jede Sekunde auszuführen, überspringt also manchmal Sekunden im zwei Sekunden-Takt. :bouncing4: Meine Frage: Habt Ihr vielleicht ein paar Tipps, oder Hilfen, wir ihr dies bewerkstelligt hättet?? thanx - se0man |
Re: Countdown
Differenz: nimm DaysBetween um die Anzahl Tage zu berechnen. Die Zeitspanne kriegst du mit
Delphi-Quellcode:
wobei Differenz Zielzeitpunkt-now ist.
TimeToStr(Frac(Differenz));
Mehr zu den Befehlen findest du in der OH |
Re: Countdown
[edit]Mods: Doppelpost bitte löschen[/edit]
|
Re: Countdown
Hoi,
erstmal danke für die schnelle Antwort. DaysBetween wäre perfekt, wenn sie tatsächlich (wie offensichtlich auf von dir angenommen ->Frac), eine Gleitkommazahl ausspucken würde. Problem: Sie rundet 23 Stunden und 59 Sekunden auf 0 Tage, da es kein ganzer Tag ist und gibt dann einen Integer zurück. Irgendeine andere Idee?? :roll: |
Re: Countdown
Ok, ich hab mich nicht ganz gut ausgedrückt, deshalb gibts jetzt Source:
Delphi-Quellcode:
Ich hoffe das war was du meinst, und wegen dem 23:59 Stunden Beispiel, hier sind Werte:
var
CTime, Diff: TDateTime; Days: Integer; Time: String; begin CTime := Now; Diff := Trunc(ZielDatum)+Frac(ZielUhrzeit)-CTime; Days := DaysBetween(CTime,Trunc(ZielDatum)+Frac(ZielUhrzeit)); Time := TimeToStr(Frac(Diff)); end; Days wird 0 sein Time wird '23:59:xx' sein |
Re: Countdown
:hello:
Yes, Genau das war es, was ich suchte! Glaub' mir, du willst gar nicht sehen wie mein Source vorher aussah. Thanx a lot - se0man |
Re: Countdown
Das einzige,
was mir gerade noch auffiel: Was soll Trunc/Frac bei Datum/Uhrzeit bezwecken? Sind doch gar keine Kommazahlen!? Ist das nicht überflüssig? - se0man |
Re: Countdown
Ähm, TDateTime ist ein Double. Der Teil vor dem Komma (also das was du mit Trunc bekommst), gibt die Tage seit dem 30.12.1899 an. Der Teil nach dem Komma (das was Frac zurückgibt), gibt die Uhrzeit an, also in verstrichenen Tagen (1/24 = 1 Stunde etc.). Ich verwende seit einem Fehler in der Anwendung (irgendwo war da nach dem Komma was) immer Trunc und Frac, wenn ich mit Datum/Zeit arbeite.
|
Re: Countdown
:gruebel:
Habe ich dich richtig verstanden, dass beispielsweise die Funktion DateToStr für unzuverlässig hälst, wenn es darum geht aus einer TDataTime-Variable das Datum zu filtern? - se0man |
Re: Countdown
Nö, aber ich hab ein Datum aus mehreren Variablen zusammengestellt (allesamt Float), und dabei brauchte ich immer nur gewisse Teile. Aus irgendeinem Grund hat mir das beim Zusammenrechnen Fehler ergeben (nicht bei DateToStrm ,sondern beim Rechnen), und somit verwende ich immer Trunc und Frac. Du kannst es aber auch weglassen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:27 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