Delphi-PRAXiS

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)

Helmi 23. Apr 2017 09:28

auf Datumsänderung reagieren
 
Hallo Zusammen,

ich möchte auf einen Datumswechsel reagieren.

Nun könnte ich natürlich einen Timer nutzen, dort das aktuelle Datum auslesen, mit einem gespeicherten Datum vergleichen und dann bei Unterschied dementsprechend reagieren.

Nur gibt es vielleicht noch eine andere Möglichkeit, als ständig einen Timer laufen zu lassen?

kurze Info:
Der Rechner, auf dem das Programm läuft, läuft immer, bzw. ist im Standby und wird somit nicht immer runtergefahren.
Somit läuft das Programm auch ständig.

Ydobon 23. Apr 2017 09:49

AW: auf Datumsänderung reagieren
 
Eventuell über die Aufgabenplanung immer 0 Uhr. Dann übernimmt Windows die Timer.
https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx

Helmi 23. Apr 2017 09:57

AW: auf Datumsänderung reagieren
 
Zitat:

Zitat von Ydobon (Beitrag 1368700)
Eventuell über die Aufgabenplanung immer 0 Uhr. Dann übernimmt Windows die Timer.
https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx

Ich würd das gerne im Programm machen.

Der Link scheint nicht zu funktionieren

Michael II 23. Apr 2017 10:02

AW: auf Datumsänderung reagieren
 
Hast du die vielen Kommentare hier

http://www.delphipraxis.net/148852-a...reagieren.html

bereits gelesen?

Ydobon 23. Apr 2017 10:05

AW: auf Datumsänderung reagieren
 
Komisch bei mir funktioniert er. Eventuell direkter https://msdn.microsoft.com/de-de/lib.../aa383614.aspx

Du könntest ein kleines Zusatzprogramm starten, das dann eine Botschaft rüber schickt oder z.B. in einer Mutex-Verarbeitung vom Programm selbst die Botschaft schicken.

Helmi 23. Apr 2017 10:15

AW: auf Datumsänderung reagieren
 
Zitat:

Zitat von Michael II (Beitrag 1368703)
Hast du die vielen Kommentare hier

http://www.delphipraxis.net/148852-a...reagieren.html

bereits gelesen?

mmh - warum hab ich den Thread nicht gefunden? :gruebel:
Danke dafür!

nahpets 23. Apr 2017 10:31

AW: auf Datumsänderung reagieren
 
Schaumal bitte hier: http://www.delphipraxis.net/1332933-post2.html

Michael II 23. Apr 2017 13:06

AW: auf Datumsänderung reagieren
 
naphets Beispiel Code:

Zitat:

// Der Rundungsfehler liegt bei +/- einer Millisekunde
...wobei man immer noch an die User vor Vista denken sollte - bei den "vor Vista OS" zeigt now nur alle 10-55Millisekunden eine neue Zeit an. (Ich weiss, es spielt bei dieser Anwendung kaum eine Rolle.)

Und ein kleiner Tipp: Neben trunc kennt Delphi auch round und frac. Dann lassen sich die Millisekunden bis zum nächsten Tag auch so berechnen:
Delphi-Quellcode:
m := round((1-frac(now))*24*60*60*1000);
Fertig kluggeschi... :shock:

p80286 23. Apr 2017 13:07

AW: auf Datumsänderung reagieren
 
Definiere Datumswechsel!
Im allgemeinen hat sich das Datum geändert wenn ich morgens wach werde, und irgendwann zwischen 23:59,59 und 0:01,00 ändert sich das Datum. Eine weitere Möglichkeit wäre es per Schiff oder Flugzeug die Datumsgrenze zu überschreiten. Es kommt immer auf die Betrachtungsweise an.

Gruß
k-H

Helmi 23. Apr 2017 13:26

AW: auf Datumsänderung reagieren
 
Zitat:

Zitat von p80286 (Beitrag 1368733)
Definiere Datumswechsel!
Im allgemeinen hat sich das Datum geändert wenn ich morgens wach werde, und irgendwann zwischen 23:59,59 und 0:01,00 ändert sich das Datum. Eine weitere Möglichkeit wäre es per Schiff oder Flugzeug die Datumsgrenze zu überschreiten. Es kommt immer auf die Betrachtungsweise an.

Wo ist der Unterschied?
Es ändert sich das Datum - wie auch immer

Ich versteh aber deine Frage.
Entweder man möchte auf Datumwechsel von Tagen reagieren oder auf Datumswechsel, die egal wie entstehen können.

Nichtsdestotrotz werd ich die simpelste Variante wählen und einfach in einem Timer das Datum vergleichen.

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 09:25 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