![]() |
Datum Timer Mitternacht (CheckNewDay)
Mit Hilfe eines TLabels lasse ich mir Tag, Datum und KW anzeigen (An dieser Stelle vielen Dank an den Mathematiker, ich habe deine KW Function gefunden und verbaut).
Wie kann man genau prüfen, ob es Mitternacht ist um dieses Label zu aktualisieren ? Im Moment vergleiche ich zwei Strings: (kein MultimediaTimer oder QueuedTimer... ist der ganz einfache Timer, Intervall: 1000)
Delphi-Quellcode:
Procedure TwndToDO.timerTIMETimer(Sender: TObject);
Var CheckNewDay: String; Begin Try labTime.Caption := TimeToStr(Now)+' '; labTime_Sh.Caption:= labTime.Caption; Inc(Counter); If Counter = 20 Then Begin Counter:= 0; CheckNewDay:= FormatDateTime('hh:mm',Now); If CheckNewDay = '00:00' Then Begin labDate.Caption:= // gekürzt, viel zu lang... labDate_Sh.Caption:= labDate.Caption; End; End; Except On E: Exception Do ErrorLog('TimerTIME Failed'+#13#10+E.ClassName+#13#10+E.Message); End; End; |
AW: Datum Timer Mitternacht (CheckNewDay)
Versuchs mal damit:
Delphi-Quellcode:
Im Programm in etwa so verwenden:
const
iOneSecond : Integer = 1000; // eine Sekunde in Millisekunden iOneMinute : Integer = 60000; // eine Minute in Millisekunden iFiveMinutes : Integer = 300000; // Fünf Minuten in Millisekunden iFifteenMinutes : Integer = 900000; // Fünfzehn Minuten in Millisekunden iOneHour : Integer = 3600000; // Eine Stunde in Millisekunden iOneDay : Integer = 86400000; // Ein Tag in Millisekunden function TSpecialTimer.CalcTimerInterval(iTimerInterval : Integer) : Integer; Var dNow : Double; begin // Interval setzen // Tagesdatum und Uhrzeit holen dNow := Now; // Den Tagesanteil holen (= Nachkommastellen). dNow := dNow - Trunc(dNow); // Rest bis Mitternacht holen. dNow := 1 - dNow; // Nachkommastellen mal Millisekunden pro Tag Result := Trunc(dNow * iOneDay); // wir benötigen den Rest bis zum angegeben Interval, damit der Timer // zur nächsten Minute, Stunde, 0 Uhr ... aktiv wird. Result := (Result mod iTimerInterval); end;
Delphi-Quellcode:
Beim Programmstart (oder an geeigneter Stelle), damit das Timerereignis einmalig "händisch" ausgeführt wird.
Procedure TwndToDO.timerTIMETimer(Sender: TObject);
Var CheckNewDay: String; Begin Try timerTIME.Enabled := False; labTime.Caption := TimeToStr(Now)+' '; labTime_Sh.Caption:= labTime.Caption; labDate.Caption:= // gekürzt, viel zu lang... labDate_Sh.Caption:= labDate.Caption; // CalcTimerInterval berechnet die "fehlenden" Millisekunden bis Mitternacht // und setzt das Interval entsprechend. // Der Timer wird also um Mitternacht ausgelöst. // Der Rundungsfehler liegt bei +/- einer Millisekunde. timerTIME.Interval := CalcTimerInterval(iOneDay); timerTIME.Enabled := True; Except On E: Exception Do ErrorLog('TimerTIME Failed'+#13#10+E.ClassName+#13#10+E.Message); End; End;
Delphi-Quellcode:
Dadurch müsste das Label dann die entsprechenden Werte erhalten und anschließend jeweils um Mitternacht aktuallisiert werden.
...
timerTIMETimer(Nil); ... |
AW: Datum Timer Mitternacht (CheckNewDay)
@nahpets:
Danke für die Info... Mir ist schon aufgefallen, dass mein erster Ansatz nicht zu gebrauchen ist, da er niemals zu 100% funzt. Hatte gerade angefangen das komplett umzubauen und mal zu schauen ob der neue Ansatz besser ist...
Delphi-Quellcode:
Ich schau mir jetzt erstmal deinen Weg an...
Procedure TForm1.FormCreate(Sender: TObject);
Begin labDate.Caption:= DateToStr(Now); timerTIME.Enabled:= True; End; Procedure TForm1.timerTIMETimer(Sender: TObject); Var CheckNewDay: String; Begin // UpdateTIME CheckNewDay:= FormatDateTime('hh',Now); If CheckNewDay = '00' Then Begin If booDateUpdated Then Exit; labDate.Caption:= // Werte aktualisieren... booDateUpdated:= True; End Else booDateUpdated:= False; End; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:44 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 by Thomas Breitkreuz