![]() |
AW: Datumsformat (TT.MM.JJJJ) anzeigen
Danke TiGü, ich habe es jetzt so umgesetzt
Delphi-Quellcode:
Ein Kompilat kann ich erzeugen aber der sagt dann immer "Unzulässige Attribute". Was mache ich noch falsch?
function GetLocaleInfoEx(const lpLocaleName: LPCWSTR; const LCType: LCTYPE; out lpLCData: LPWSTR; const cchData: integer): Integer; external kernel32 name 'GetLocaleInfoEx';
procedure DoJob; const LOCALE_NAME_SYSTEM_DEFAULT = '!x-sys-default-locale'; var lpLocaleName: PWideChar; LLCType: LCTYPE; lpLCData: PWideChar; cchData, ReturnValue: Integer; DataValue: array of WideChar; begin lpLocaleName := PChar(LOCALE_NAME_SYSTEM_DEFAULT); LLCType := LOCALE_SSHORTDATE; lpLCData := nil; cchData := 0; cchData := GetLocaleInfoEx(lpLocaleName, LLCType, lpLCData, cchData); if cchData = 0 then RaiseLastOSError else begin SetLength(DataValue, cchData); lpLCData := @DataValue[0]; cchData := GetLocaleInfoEx(lpLocaleName, LLCType, lpLCData, cchData); end; ShowMessage(string(DataValue)); end; procedure TForm1.FormCreate(Sender: TObject); Begin DoJob(); End; |
AW: Datumsformat (TT.MM.JJJJ) anzeigen
Delphi-Quellcode:
function GetLocaleInfoEx(lpLocaleName: PWideChar; LCType: LCTYPE;
lpLCData: PWideChar; cchData: Integer): Integer; stdcall; external kernel32 name 'GetLocaleInfoEx'; |
AW: Datumsformat (TT.MM.JJJJ) anzeigen
Liste der Anhänge anzeigen (Anzahl: 1)
Danke fürs korrigieren aber ich erhalte dabei einen leeren String. Anhang 49223
Mein Delphi und ich machen da noch irgendwas falsch. |
AW: Datumsformat (TT.MM.JJJJ) anzeigen
Delphi-Quellcode:
function GetLocaleInfoEx(lpLocaleName: PWideChar; LCType: LCTYPE;
lpLCData: PWideChar; cchData: Integer): Integer; stdcall; external kernel32 name 'GetLocaleInfoEx'; ... var lpLocaleName: PWideChar; LLCType: LCTYPE; lpLCData: PWideChar; cchData, ReturnValue: Integer; DataValue: array of WideChar; DataString: string; begin lpLocaleName := PChar(LOCALE_NAME_USER_DEFAULT); LLCType := LOCALE_SSHORTDATE; lpLCData := nil; cchData := 0; cchData := GetLocaleInfoEx(lpLocaleName, LLCType, lpLCData, cchData); if cchData = 0 then RaiseLastOSError else begin SetLength(DataValue, cchData); lpLCData := @DataValue[0]; cchData := GetLocaleInfoEx(lpLocaleName, LLCType, lpLCData, cchData); end; SetString(DataString, PChar(@DataValue[0]), Length(DataValue)); ShowMessage(DataString); end; |
AW: Datumsformat (TT.MM.JJJJ) anzeigen
So klappt es, vielen Dank!
Hier nochmal für HolgerX wegen fehlender Konstanten zum nachvollziehen:
Delphi-Quellcode:
Aber das Ergebnis bleibt auch hier = dd.MM.yyyy
function GetLocaleInfoEx(lpLocaleName: PWideChar; LCType: LCTYPE; lpLCData: PWideChar; cchData: Integer): Integer; stdcall; external kernel32 name 'GetLocaleInfoEx';
procedure DoJob; const LOCALE_NAME_SYSTEM_DEFAULT = '!x-sys-default-locale'; // <- das bringt bei mir einen Leerstring LOCALE_NAME_USER_DEFAULT = $00; // <- das funktioniert var lpLocaleName: PWideChar; LLCType: LCTYPE; lpLCData: PWideChar; cchData, ReturnValue: Integer; DataValue: array of WideChar; DataString: string; begin lpLocaleName := PChar(LOCALE_NAME_USER_DEFAULT); LLCType := LOCALE_SSHORTDATE; lpLCData := nil; cchData := 0; cchData := GetLocaleInfoEx(lpLocaleName, LLCType, lpLCData, cchData); if cchData = 0 then RaiseLastOSError else begin SetLength(DataValue, cchData); lpLCData := @DataValue[0]; cchData := GetLocaleInfoEx(lpLocaleName, LLCType, lpLCData, cchData); end; SetString(DataString, PChar(@DataValue[0]), Length(DataValue)); ShowMessage(DataString); end; also irgendwie alles das gleiche nur eine andere Möglichkeit:gruebel: |
AW: Datumsformat (TT.MM.JJJJ) anzeigen
Hmm..
Zitat:
Es scheint keine API zu geben, um das 'TT.MM.JJJJ' zu erhalten, dies macht anscheinend der Windows-Dialog selber.... |
AW: Datumsformat (TT.MM.JJJJ) anzeigen
Zitat:
![]() Zitat:
|
AW: Datumsformat (TT.MM.JJJJ) anzeigen
Um das nochmal zu verdeutlichen:
Region-Settings = Deutsch, Sprache = Deutsch => TT.MM.JJJJ Region-Settings = English (US), Sprache = Deutsch => M/T/JJJJ Region-Settings = Deutsch, Sprache = English => DD.MM.YYYY Region-Settings = English (US), Sprache = English => M/D/YYYY |
AW: Datumsformat (TT.MM.JJJJ) anzeigen
Delphi-Quellcode:
function GLI(T: Cardinal): String;
var NeedLen : Integer; begin NeedLen := GetLocaleInfo(LOCALE_USER_DEFAULT, t, nil, 0); SetLength(Result, NeedLen); if GetLocaleInfo( LOCALE_USER_DEFAULT, t, PChar(Result), NeedLen) <> 0 then SetLength(Result, NeedLen-1) else RaiseLastOSError; end; function GetLocaleInfoEx(lpLocaleName: PWideChar; LCType: LCTYPE; lpLCData: PWideChar; cchData: Integer): Integer; stdcall; external kernel32 name 'GetLocaleInfoEx'; function GLIx(T: Cardinal): String; const LOCALE_NAME_USER_DEFAULT = $00; var NeedLen : Integer; begin NeedLen := GetLocaleInfoEx(PChar(LOCALE_NAME_USER_DEFAULT), t, nil, 0); SetLength(Result, NeedLen); if GetLocaleInfoEx(PChar(LOCALE_NAME_USER_DEFAULT), t, PChar(Result), NeedLen) <> 0 then SetLength(Result, NeedLen-1) else RaiseLastOSError; end; function GetFmtSet: String; var FmtSet: TFormatSettings; begin try GetLocaleFormatSettings(LOCALE_USER_DEFAULT, FmtSet); finally Result := FmtSet.ShortDateFormat; end; end;
Delphi-Quellcode:
Alle Varianten liefern "dd.MM.yyyy" als Ergebnis, ist es Geschmacksfrage oder gibt es da noch ein Richtig/Falsch ?
ShowMessage('GLIx: ' + GLIx(LOCALE_SSHORTDATE));
ShowMessage('GLI: ' + GLI(LOCALE_SSHORTDATE)); ShowMessage('TFormatSettings:' + GetFmtSet); |
AW: Datumsformat (TT.MM.JJJJ) anzeigen
Zitat:
![]() gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:52 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