Einzelnen Beitrag anzeigen

nahpets
(Gast)

n/a Beiträge
 
#2

AW: Datum Timer Mitternacht (CheckNewDay)

  Alt 14. Mär 2016, 18:38
Versuchs mal damit:
Delphi-Quellcode:
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;
Im Programm in etwa so verwenden:
Delphi-Quellcode:
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;
Beim Programmstart (oder an geeigneter Stelle), damit das Timerereignis einmalig "händisch" ausgeführt wird.
Delphi-Quellcode:
...
  timerTIMETimer(Nil);
...
Dadurch müsste das Label dann die entsprechenden Werte erhalten und anschließend jeweils um Mitternacht aktuallisiert werden.
  Mit Zitat antworten Zitat