Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Countdown (https://www.delphipraxis.net/21805-countdown.html)

se0man 8. Mai 2004 13:43


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

alcaeus 8. Mai 2004 13:48

Re: Countdown
 
Differenz: nimm DaysBetween um die Anzahl Tage zu berechnen. Die Zeitspanne kriegst du mit
Delphi-Quellcode:
TimeToStr(Frac(Differenz));
wobei Differenz Zielzeitpunkt-now ist.
Mehr zu den Befehlen findest du in der OH

alcaeus 8. Mai 2004 13:48

Re: Countdown
 
[edit]Mods: Doppelpost bitte löschen[/edit]

se0man 8. Mai 2004 13:58

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:

alcaeus 8. Mai 2004 14:05

Re: Countdown
 
Ok, ich hab mich nicht ganz gut ausgedrückt, deshalb gibts jetzt Source:
Delphi-Quellcode:
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;
Ich hoffe das war was du meinst, und wegen dem 23:59 Stunden Beispiel, hier sind Werte:
Days wird 0 sein
Time wird '23:59:xx' sein

se0man 8. Mai 2004 14:38

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

se0man 8. Mai 2004 14:41

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

alcaeus 8. Mai 2004 14:46

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.

se0man 8. Mai 2004 14:50

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

alcaeus 8. Mai 2004 14:58

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 00:15 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