Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi auf Datumsänderung reagieren (https://www.delphipraxis.net/192490-auf-datumsaenderung-reagieren.html)

a.def 23. Apr 2017 15:39

AW: auf Datumsänderung reagieren
 
Zitat:

Nichtsdestotrotz werd ich die simpelste Variante wählen und einfach in einem Timer das Datum vergleichen.
Das hier ist noch simpler und funktioniert mit automatisierten und manuellen Zeitänderungen:
...herausfinden, wenn die Systemzeit geändert wurde?

Helmi 23. Apr 2017 15:49

AW: auf Datumsänderung reagieren
 
Zitat:

Zitat von a.def (Beitrag 1368745)
Zitat:

Nichtsdestotrotz werd ich die simpelste Variante wählen und einfach in einem Timer das Datum vergleichen.
Das hier ist noch simpler und funktioniert mit automatisierten und manuellen Zeitänderungen:
...herausfinden, wenn die Systemzeit geändert wurde?

Aber so wie ich das verstehe, nur, wenn man die Systemzeit ändert (z. B. manuell im Dialog).
Nicht, wenn sich das Datum ändert, weil ein neuer Tag beginnt.

a.def 23. Apr 2017 15:57

AW: auf Datumsänderung reagieren
 
Gerade getestet.

Manuell, aber nicht über den Windows-Dialog. Also dasselbe wie eine automatisierte Änderung ( :?: ) :

Delphi-Quellcode:
procedure SetDateTime(Year, Month, Day, Hour, Minu, Sec, MSec: Word);
var
  NewDateTime: TSystemTime;
begin
  FillChar(NewDateTime, SizeOf(NewDateTime), #0);
  NewDateTime.wYear := Year;
  NewDateTime.wMonth := Month;
  NewDateTime.wDay := Day;
  NewDateTime.wHour := Hour;
  NewDateTime.wMinute := Minu;
  NewDateTime.wSecond := Sec;
  NewDateTime.wMilliseconds := MSec;
  SetLocalTime(NewDateTime);
end;

SetDateTime(2017, 04, 30, 12,13,14,00);

Michael II 23. Apr 2017 16:09

AW: auf Datumsänderung reagieren
 
Ja Helmi

die Windowsmessage WM_TIMECHANGE wird immer dann gefeuert, wenn an der Systemzeit geschraubt wird.

Du kannst es auch leicht testen. Knall ein TApplicationEvents auf ein Form, wähle ApplicationEvents1.OnMessage und ergänze:

Delphi-Quellcode:
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
begin
  if Msg.message = WM_TIMECHANGE then
  begin
    ShowMessage( 'Aber Hallo' );
    Handled := true;
  end;
end;
...und nun änderst du die Zeit auf deinem Compi. Dein Programm meldet sich mit "Aber Hallo".

WM_TIMECHANGE hilft dir also nix.

Wie erwähnt: In Extremis könntest du einen Timer mit Intervall round((1-frac(now))*24*60*60*1000) starten und würdest so benachrichtigt, wenn ein neuer Tag beginnt. Problem gelöst mit einem Einzeiler. [Wenn du dem Zeitmesser auf deiner Kiste nicht traust, dann kannst du ja häufiger checken :-D.]

a.def 23. Apr 2017 16:12

AW: auf Datumsänderung reagieren
 
Zitat:

ich möchte auf einen Datumswechsel reagieren.
Zitat:

WM_TIMECHANGE hilft dir also nix.
Wieso das? WM_TIMECHANGE macht doch genau das was er will?

Michael II 23. Apr 2017 16:34

AW: auf Datumsänderung reagieren
 
OK, ich klink mich hier mal aus :-D.

1
Ich verstehe Helmi so, dass das Programm reagieren soll, wenn ein neuer Tag beginnt.

2
Wenn Helmi jedoch darauf reagieren will, wenn jemand die Systemzeit ändert (ich glaube nicht), dann ist natürlich WM_TIMECHANGE genau richtig.


Und wenn Helmi zwar nach 1 sucht und 2 dennoch einbauen möchte: Man könnte das Programm das TimerIntervall neu berechnen lassen, wenn WM_TIMECHANGE empfangen wird.

Ich bin dann mal raus...


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:24 Uhr.
Seite 2 von 2     12   

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