![]() |
Countdown funktioniert nicht richtig?!
Hallo DP'ler,
Also ich habe einen Countdown mit folgendem Code
Delphi-Quellcode:
Soweit geht das auch alles. Allerdings wenn ich den Countdown auf 15:46:10 einstelle bekomme ich auch ne Nachricht, das der Countdown beendet sei bei 15:45:10. Sprich er vergleicht die Sekunden?!
procedure TForm2.Timer3Timer(Sender: TObject);
VAR EndDatum : TDateTime; Aktuell : TDateTime; Dazwischen : Integer; Tage, Stunden, Minuten, Sekunden : Integer; BEGIN // Countdown DateTimePicker1.Time := DateTimePicker2.Time; EndDatum := DateTimePicker1.DateTime; Aktuell := Now; Dazwischen := SecondsBetween(Aktuell, EndDatum); Tage := Dazwischen div (60*60*24); Dazwischen := Dazwischen - (Tage * 60 * 60 * 24); Stunden := Dazwischen div (60*60); Dazwischen := Dazwischen - (Stunden * 60 * 60); Minuten := Dazwischen div 60; Dazwischen := Dazwischen - ( Minuten * 60); Sekunden := Dazwischen; Form1.Label4.Font.Color := clred; Form1.Label4.Caption := Format('%d Tage, %d Stunden, %d Minuten & %d Sekunden bis ' + Edit5.Text + '!', [Tage, Stunden, Minuten, Sekunden]); IF Dazwischen <= 0 THEN BEGIN // ggf liegt hier der Fehler IF CheckBox10.Checked THEN BEGIN sndPlaySound(PChar(ExtractFilePath(ParamStr(0)) + 'Wecker.wav'),SND_ASYNC); END; ShowMessage('Ihr Countdown ist nun beendet! '+ (Edit5.text)); Form1.Label4.Hide; sndPlaySound(nil,0); END; END; |
Re: Countdown funktioniert nicht richtig?!
versuchs doch mit Abs(Dazwischen)
Edit: quatsch dann geht dir der Zeitpunkt durch die Lappen.. hmm.. hast ma auf >= geprüft? |
Re: Countdown funktioniert nicht richtig?!
Zitat:
jedes mal, wenn zwischen der aktuellen Zeit und der Zeit bis zum Countdown mehr als 0 Sekunden liegen bekomme ich ne Nachricht "Countdown beendet" Sprich ununterbrochen bekomme ich die Meldung |
Re: Countdown funktioniert nicht richtig?!
Du ziehst die ganze zeit Tage, Stunden und Minuten von Dazwischen ab
das heisst selbst wenn es noch mehrere tage sind werden sie nicht berücksichtigt also vergleicht er effektiv tatsächlich nur die sekunden Schreib dir den Wert von Dazwischen in eine extra variable und frag diese ab, dann sollte es gehn |
Re: Countdown funktioniert nicht richtig?!
Ich frage mich, wieso Du immer wieder von "Dazwischen" subtrahierst. Ist das wirklich richtig so?
[edit] Da war ich wohl nicht alleine :lol: [/edit] |
Re: Countdown funktioniert nicht richtig?!
Unabhängig davon dass es bestimmt auch anders mit dem "Dazwischen" geht von wegen dem Subtrahieren, du könntest doch auch einfach "Sekunden", "Minuten", etc. auf <=0 überprüfen und nicht nur "Dazwischen" (die Werte hast du ja sowieso)...
Edit: Mhhh...wobei das natürlich das Gleiche ist wie einfach den ursprünglichen Wert von SecondsBetween zu merken :mrgreen: |
Re: Countdown funktioniert nicht richtig?!
Ich denke, das geht auch um einiges kürzer. Man subtrahiert die aktuelle Zeit von der eingegebenen und gibt das Ergebnis mit FormatDateTime aus. Ist das Ergebnis <= 0, ist die Endzeit erreicht bzw. überschritten.
|
Re: Countdown funktioniert nicht richtig?!
Delphi-Quellcode:
So hab ich das nun aber irgendwie bekomm ich gar keine Meldung mehr?!
procedure TForm2.Timer3Timer(Sender: TObject);
VAR EndDatum : TDateTime; Aktuell : TDateTime; Dazwischen : Integer; Tage, Stunden, Minuten, Sekunden : Integer; BEGIN // Countdown DateTimePicker1.Time := DateTimePicker2.Time; EndDatum := DateTimePicker1.DateTime; Aktuell := Now; Dazwischen := SecondsBetween(Aktuell, EndDatum); Tage := Dazwischen div (60*60*24); Dazwischen := Dazwischen - (Tage * 60 * 60 * 24); Stunden := Dazwischen div (60*60); Dazwischen := Dazwischen - (Stunden * 60 * 60); Minuten := Dazwischen div 60; Dazwischen := Dazwischen - ( Minuten * 60); Sekunden := Dazwischen; Form1.Label4.Font.Color := clred; Form1.Label4.Caption := Format('%d Tage, %d Stunden, %d Minuten & %d Sekunden bis ' + Edit5.Text + '!', [Tage, Stunden, Minuten, Sekunden]); IF (Tage <= 0) AND (Stunden<=0) AND (Minuten<0) AND (Sekunden<=0) THEN BEGIN // <-------------------- IF CheckBox10.Checked THEN BEGIN sndPlaySound(PChar(ExtractFilePath(ParamStr(0)) + 'Wecker.wav'),SND_ASYNC); END; ShowMessage('Ihr Countdown ist nun beendet! '+ (Edit5.text)); Form1.Label4.Hide; sndPlaySound(nil,0); END; END; Nach DeddyH's Vorschlag:
Delphi-Quellcode:
procedure TForm2.Timer3Timer(Sender: TObject);
VAR jetzt, ziel, erg : TDateTime; BEGIN jetzt := now; ziel := DateTimePicker1.Date + DateTimePicker2.Time; erg := ziel - jetzt; IF erg <= 0 then BEGIN IF CheckBox10.Checked THEN BEGIN sndPlaySound(PChar(ExtractFilePath(ParamStr(0)) + 'Wecker.wav'),SND_ASYNC); END; ShowMessage('Ihr Countdown ist nun beendet! '+ (Edit5.text)); Form1.Label4.Hide; sndPlaySound(nil,0); end; end; |
Re: Countdown funktioniert nicht richtig?!
Zitat:
Wobei die Lösung von DeddyH mit FormatDateTime ohnehin viel schöner ist... MfG Benedikt |
Re: Countdown funktioniert nicht richtig?!
Zitat:
Bernhard EDIT: Na ja, da war einer ohne roten Kasten schneller. Edit2: Noch ne Frage: In deinem 1. Code hast du die Zeile: DateTimePicker1.Time := DateTimePicker2.Time; Im 2. Code wird daraus: ziel := DateTimePicker1.Date + DateTimePicker2.Time; Kann das ein Auslöser für eine nicht vorhandene Meldung sein? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:51 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