![]() |
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:
Später mache ich sowas (stark vereinfacht):
DateSeparator := '-';
TimeSeparator := ':'; ShortDateFormat := 'yyyy/mm/dd'; LongTimeFormat := 'hh:nn:ss';
Delphi-Quellcode:
was auch eigentlich niemals eine Exception wirft, weil ich ja das ShortDateFormat oben passend gesetzt habe.
bla := StrToDateTime('2000-01-01 01:00:00')
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? |
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
|
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.
|
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:
|
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.
|
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.
|
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. |
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.Ä.
|
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 12:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz