AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Datum Timer Mitternacht (CheckNewDay)
Thema durchsuchen
Ansicht
Themen-Optionen

Datum Timer Mitternacht (CheckNewDay)

Ein Thema von FarAndBeyond · begonnen am 14. Mär 2016 · letzter Beitrag vom 14. Mär 2016
Antwort Antwort
FarAndBeyond
(Gast)

n/a Beiträge
 
#1

Datum Timer Mitternacht (CheckNewDay)

  Alt 14. Mär 2016, 16:56
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;
  Mit Zitat antworten Zitat
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
FarAndBeyond
(Gast)

n/a Beiträge
 
#3

AW: Datum Timer Mitternacht (CheckNewDay)

  Alt 14. Mär 2016, 20:12
@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:
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;
Ich schau mir jetzt erstmal deinen Weg an...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:35 Uhr.
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