Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Ländereinstellung ermitteln (https://www.delphipraxis.net/92496-laendereinstellung-ermitteln.html)

guitarre 21. Mai 2007 11:03


Ländereinstellung ermitteln
 
Hallo zusammen,

kann mir jemand von Euch vielleicht sagen, wie ich die Ländereinstellung des Betriebssystems ermitteln kann,(de,eng etc...)

Danke schon einmal im Voraus

Gruß guitarre

marabu 21. Mai 2007 11:24

Re: Ländereinstellung ermitteln
 
Herzlich willkommen in der Delphi-PRAXiS, guitarre.

Dich dürften die WIN32 API Funktionen GetSystemDefaultLCID() bzw. GetUserDefaultLCID() interessieren. Diese Funktionen liefern dir die definierten Konstanten. Wenn du diese Konstanten noch in einen String übersetzen möchtest, dann ist weiterer Aufwand zu treiben.

Freundliche Grüße vom marabu

guitarre 21. Mai 2007 11:30

Re: Ländereinstellung ermitteln
 
hallo marabu,

Danke ,das gefällt mir schon mal sehr gut !
Gibt es auch eine Funktion, die anstatt einen IntWert einen String liefert ??

Danke schon einmal für den ersten Tipp !!

Gruß guitarre

marabu 21. Mai 2007 11:35

Re: Ländereinstellung ermitteln
 
Schau dir dazu bitte mal die Funktion Languages in der Unit SysUtils an.

Luckie 21. Mai 2007 11:37

Re: Ländereinstellung ermitteln
 
Meinst du so was:
Delphi-Quellcode:
////////////////////////////////////////////////////////////////////////////////
// Procedure : GetOSLanguageID
// Comment  : Returns the language of the OS
function GetOSLanguageStr: string;
begin
  SetLength(Result, MAX_PATH);
  SetLength(Result, VerLanguageName(GetSystemDefaultLangId,
    @Result[1], length(Result)));
end;

////////////////////////////////////////////////////////////////////////////////
// Procedure : GetOSLanguageStr
// Comment  : Returns the language ID-String
function GetOSLanguageIDStr: string;
var
  Buffer           : array[0..MAX_PATH] of char;
  len              : Integer;
begin
  ZeroMemory(@Buffer, sizeof(Buffer));
  len := GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SABBREVLANGNAME, Buffer,
    sizeof(Buffer));
  SetString(result, Buffer, len);
end;

guitarre 21. Mai 2007 11:47

Re: Ländereinstellung ermitteln
 
@marabu,
@michael,

DANKE, genau das meinte ich !

Gruß guitarre

marabu 21. Mai 2007 13:19

Re: Ländereinstellung ermitteln
 
Hallo,

wurde die Unit SysUtils eingebunden, dann hat die Delphi-Anwendung diese Informationen bereits ermittelt. Man muss sie dann nur noch auslesen:

Delphi-Quellcode:
function GetSysLanguageName: string;
begin
  with Languages do
    Result := NameFromLocaleID[SysLocale.DefaultLCID];
end;

function GetSysLanguageExt: string;
begin
  with Languages do
    Result := Ext[IndexOf(SysLocale.DefaultLCID)];
end;
Freundliche Grüße

guitarre 21. Mai 2007 13:38

Re: Ländereinstellung ermitteln
 
Danke @marabu,@michael,

funktioniert alles einwandfrei.
Allerdings habe ich noch ein Problem, gibt es eine Möglichkeit die aktuelle
Ländereinstellung anzeigen zu lassen,
(z.B.: bei der Umstellung von DEU auf ENG),also nicht die Länderkennung, die defaultmäßig installiert wurde ?
Ich habe schon nach GetUserCurrentLCID gegoogelt, allerdings ohne Erfolg!
Kennt jemand eine Lösung um die aktuell eingestellte Länderkennung auszulesen???

Danke und Gruß
guitarre

marabu 21. Mai 2007 16:43

Re: Ländereinstellung ermitteln
 
Hallo,

eigentlich sollte die über die Systemsteuerung geänderte Wahl des Gebietsschemas über die API-Funktion GetThreadLocale() reflektiert werden - wird sie aber nicht:

Delphi-Quellcode:
function GetLanguageName(lcid: LCID): string;
begin
  with Languages do
    Result := NameFromLocaleID[lcid];
end;

// ShowMessage(GetLanguageName(GetThreadLocale));
Vielleicht mache ich aber auch einen Fehler.

Auf ein besonderes Problem weist Microsoft noch hin: How To Get the Current User Locale ID ... Without Restarting

Freundliche Grüße

Corelgott 21. Mai 2007 17:04

Re: Ländereinstellung ermitteln
 
vll noch als tipp.... um an ein infos einigermaßen bequem zu kommen...

Delphi-Quellcode:
type TFoobat = class(TWinControl)

     localFormatSettings : TFormatSettings;

[...]

GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, localFormatSettings);
das ist recht praktisch, wenn es um währungen, dezimal etc geht...

und dazu vll auch noch:
wenn sich etwas wärend der laufzeit ändert wird diese message gefeuert....

Delphi-Quellcode:
procedure WinSettingsChange(var Message: TMessage); message WM_WININICHANGE;

[...]

procedure TSettingsWatchDog.WinSettingsChange(var Message: TMessage);
begin
  if message.msg = WM_WININICHANGE then
    GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, localFormatSettings);

  inherited;
end;
cya
Corelgott


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:19 Uhr.
Seite 1 von 2  1 2      

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