Hallo Leutz!
Ich hab das gleiche Problem auf ASUS EeeTop2002-Systemen festgestellt. Scheint tatsächlich mit der Vorinstallation zu tun zu haben! Nach umstellen der Ländereinstellungen (auf z.B. Österreich) und sofortigem zurückstellen auf Deutschland, geht dann alles, wie es sein soll! Das gleiche passiert, wenn ich die Ländereinstellungen für Deutschland in der Systemsteuerung einfach "zurücksetze"!
Ist natürlich großer Mist! Vor allem für den Support...
Ich habe mir die Mühe gemacht, eigene Funktionen für Datums/Zeit und Währungsumwandlungen zu programmieren.
Ich deklariere mir eine globale Variable:
Delphi-Quellcode:
// Formateinstellungen für Datum/Zeit-Funktionen
// Damit Umwandlungen wie 'DateTimeToStr'
// unabhängig von den Ländereinstellungen des
// Systems funktionieren! z.B. bei Win7!!!!!
// =============================================
gFS : TFormatSettings;
Bei Programmstart initialisiere ich diese auf deutsches Format...
Delphi-Quellcode:
// Deutsche Format-Settings holen!
GetLocaleFormatSettings(1031, gFS);
...und benutze sie dann in meinen Funktionen:
Delphi-Quellcode:
function MyDateTimeToStr(const Datum : TDateTime) : String;
begin
Result := DateTimeToStr(Datum, gFS);
end;
function MyTimeToStr(const Time : TTime) : String;
begin
Result := TimeToStr(Time, gFS);
end;
function MyDateToStr(const Datum : TDateTime) : String;
begin
Result := DateToStr(Datum, gFS);
end;
function MyStrToDateTime(const szDatum : String) : TDateTime;
begin
Result := StrToDateTime(szDatum, gFS);
end;
function MyStrToDate(const szDatum : String) : TDateTime;
begin
Result := StrToDate(szDatum, gFS);
end;
function MyStrToTime(const szTime : String) : TDateTime;
begin
Result := StrToTime(szTime, gFS);
end;
function MyTryStrToDateTime(const szDatum: string; var Datum: TDateTime): Boolean;
begin
Result := TryStrToDateTime(szDatum, Datum, gFS);
end;
function MyTryStrToDate(const szDatum: string; var Datum: TDateTime): Boolean;
begin
Result := TryStrToDate(szDatum, Datum, gFS);
end;
function MyTryStrToTime(const szTime: string; var Datum: TDateTime): Boolean;
begin
Result := TryStrToTime(szTime, Datum, gFS);
end;
Ich habe mir ein kleines Testprogramm gebastelt:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
FormatSettings: TFormatSettings;
var MyLCID : Integer;
begin
GetLocaleFormatSettings(SysLocale.DefaultLCID,FormatSettings);
Label1.Caption := '(' + IntToStr(SysLocale.DefaultLCID) + ') -> ' +DateTimeToStr(now, FormatSettings);
MyLCID := GetUserDefaultLCID;
GetLocaleFormatSettings(MyLCID,FormatSettings);
Label8.Caption := '(' + IntToStr(MyLCID) + ') -> ' +DateTimeToStr(now, FormatSettings);
GetLocaleFormatSettings(1031,FormatSettings);
Label2.Caption := '(' + IntToStr(1031) + ') -> ' + DateTimeToStr(now, FormatSettings);
Label3.Caption := '() -> ' + DateTimeToStr(now);
end;
Interessant ist in diesem Zusammenhang folgendes:
Es machte auf den getesteten Windows 7 - Systemen (3 konnte ich testen) einen Unterschied, ob ich die
SysLocale.DefaultLCID (->ergibt US-Format) oder die
GetUserDefaultLCID (-> ergibt deutsches Format) benutze. Es ist nur die
SysLocale.DefaultLCID betroffen! Anscheinend benutzt Delphi diese in den eigenen Funktionen! Die über
GetUserDefaultLCID bezogene LCID ist immer korrekt!
Vermutlich ist die Lokalisierung der getesteten Windows 7-Systeme nur auf User-Ebene erfolgt...
Shit happens!
Der weiß, daß er nichts weiß, wie alle anderen auch nichts wissen.
Nur weiß er, was die anderen und auch er selbst noch lernen müssen.
(Novalis 1772 - 1801)