Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi ShortDateFormat nach Windows-Sperrung/Entsperrung geändert (https://www.delphipraxis.net/138452-shortdateformat-nach-windows-sperrung-entsperrung-geaendert.html)

anse 10. Aug 2009 19:21


ShortDateFormat nach Windows-Sperrung/Entsperrung geändert
 
Bin gerade auf einen merkwürdiges Phänomen gestoßen, daß bei mir diverse EConvertError Exceptions bei StrToDateTime() verursacht. Ich setze bei Programmstart die regionalen Datums-Einstellungen folgendermaßen:
Delphi-Quellcode:
DateSeparator := '-';
TimeSeparator := ':';
ShortDateFormat := 'yyyy/mm/dd';
LongTimeFormat := 'hh:nn:ss';
Später mache ich sowas (stark vereinfacht):
Delphi-Quellcode:
bla := StrToDateTime('2000-01-01 01:00:00')
was auch eigentlich niemals eine Exception wirft, weil ich ja das ShortDateFormat oben passend gesetzt habe.

Nun habe ich durch Zufall einmal
1. Programm gestartet
2. mein Vista gesperrt ...
3. ... und wieder entsperrt
4. tataa - EConvertErrors in StrToDateTime(), weil ShortDateFormat zurückgesetzt wurde auf meine deutschen Originaleinstellungen ('dd.MM.yyyy')

Woher kommt dieses eigenmächtige Verhalten und wie kann ich das verhindern?

Satty67 10. Aug 2009 19:39

Re: ShortDateFormat nach Windows-Sperrung/Entsperrung geände
 
Wenn ich das aus der Delphi Hilfe richtig interpretiere:

Nach sperren/entsperren von Windows bekommt Deine Anwendung von Windows wohl eine WM_WININICHANGE-Botschaft. Diese sorgt dafür, das solche Variablen mit GetLocalInfo neu eingelesen werden.

Das kann man verhindern mit
Delphi-Quellcode:
Application.UpdateFormatSettings := False

mkinzler 10. Aug 2009 19:44

Re: ShortDateFormat nach Windows-Sperrung/Entsperrung geände
 
Bei neueren Delphiversionen könnte man auch die überladenen Versionen mit dem Foramt als Parameter wählen.

anse 10. Aug 2009 21:41

Re: ShortDateFormat nach Windows-Sperrung/Entsperrung geände
 
Vielen Dank! Application.UpdateFormatSettings ist genau dafür gedacht.

Merkwürdig dennoch, dass dass Windows-Entsperren einer "System-Änderung" gleichgesetzt wird (mit der Folge WM_WININICHANGE).

Aus der Hilfe:
Zitat:

Zitat von Delphi Help
Specifies whether format settings are updated automatically when the user alters the system configuration.

Use UpdateFormatSettings to control automatic updating of format settings. The default of true is set in the constructor. UpdateFormatSettings is checked when the application receives a WM_WININICHANGE message.

Using the default format settings is recommended. These settings are initialized to the Windows local settings.

Die überladenen Versionen mit Format-Parameter verwenden eine lokale Kopie der Settings und sind damit thread-safe. Das ginge natürlich auch, ist aber in diesem Fall nicht angebracht.

Stevie 11. Aug 2009 06:16

Re: ShortDateFormat nach Windows-Sperrung/Entsperrung geände
 
Kenn mich mit Vista nicht viel aus, weil ich es meide wie die Pest, aber kann es sein, dass du nicht nur gesperrt sondern dich abgemeldet und wieder angemeldet hast? (bei XP gibts dieses schnelle Benutzerwechseln, ka, wie es bei Vista ist) Dann wäre verständlich, dass diese Window Message geschickt wird.

anse 11. Aug 2009 06:20

Re: ShortDateFormat nach Windows-Sperrung/Entsperrung geände
 
Das war nur eine Sperrung, also genau wie bei XP, keine Abmeldung. Habe allerdings das gleiche Phänomen unter XP gesehen.

Satty67 11. Aug 2009 06:41

Re: ShortDateFormat nach Windows-Sperrung/Entsperrung geände
 
Spracheinstellungen sind ja u.U. Benutzer abhängig. Die ändern sich zwar theoretisch nicht, wenn der gleiche Benutzer den Desktop entsperrt, aber das muss ja nicht der gleiche Benutzer sein. Ein Administrator kann auch entsperren... da wird wohl einfach immer vorsorglich entsprechende Botschaft an die Anwendungen versendet.

Ist ja auch besser, dass im Programm zu berücksichtigen. Gibt ja viele Einstellungs-Änderungen, die WM_WININICHANGE (WM_SETTINGCHANGE) auslösen. Sogar die Möglichkeit, dass der Benutzer tatsächlich selber ein entsprechendes Zeit-Format ändert, während das Programm läuft.

Stevie 11. Aug 2009 06:46

Re: ShortDateFormat nach Windows-Sperrung/Entsperrung geände
 
Richtig, deshalb vermeide ich es persönlich sowieso, die Formateinstellungen in meinem Programm abweichend von denen in Windows eingestellten zu haben. Wie bereits erwähnt gibt es dazu Konvertierungsfunktionen, denen man den Formatstring mitgeben kann, sollte man diese benötigen, weil man z.B. ein bestimmtes Datum/Urzeit vorbelegen möchte o.Ä.

anse 11. Aug 2009 10:28

Re: ShortDateFormat nach Windows-Sperrung/Entsperrung geände
 
Ja, vermeiden sollte man das immer tunlichst - das ist nur in speziellen Situationen sinnvoll - wie z.B. in meinem Programm :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:01 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