|
@@ -50,6 +50,13 @@ Var
|
|
|
Win32BuildNumber : dword;
|
|
|
Win32CSDVersion : ShortString; // CSD record is 128 bytes only?
|
|
|
|
|
|
+const
|
|
|
+ MaxEraCount = 7;
|
|
|
+
|
|
|
+var
|
|
|
+ EraNames: array [1..MaxEraCount] of String;
|
|
|
+ EraYearOffsets: array [1..MaxEraCount] of Integer;
|
|
|
+
|
|
|
{ Compatibility with Delphi }
|
|
|
function Win32Check(res:boolean):boolean;inline;
|
|
|
function WinCheck(res:boolean):boolean;
|
|
@@ -651,6 +658,70 @@ Begin
|
|
|
Result:=Def;
|
|
|
End;
|
|
|
|
|
|
+function EnumEraNames(Names: PChar): WINBOOL; stdcall;
|
|
|
+var
|
|
|
+ i : integer;
|
|
|
+begin
|
|
|
+ Result := False;
|
|
|
+ for i := Low(EraNames) to High(EraNames) do
|
|
|
+ if (EraNames[i] = '') then
|
|
|
+ begin
|
|
|
+ EraNames[i] := Names;
|
|
|
+ Result := True;
|
|
|
+ break;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+function EnumEraYearOffsets(YearOffsets: PChar): WINBOOL; stdcall;
|
|
|
+var
|
|
|
+ i : integer;
|
|
|
+begin
|
|
|
+ Result := False;
|
|
|
+ for i := Low(EraYearOffsets) to High(EraYearOffsets) do
|
|
|
+ if (EraYearOffsets[i] = -1) then
|
|
|
+ begin
|
|
|
+ EraYearOffsets[i] := StrToIntDef(YearOffsets, 0);
|
|
|
+ Result := True;
|
|
|
+ break;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure GetEraNamesAndYearOffsets;
|
|
|
+ var
|
|
|
+ ACALID : CALID;
|
|
|
+ ALCID : LCID;
|
|
|
+ buf : array[0..10] of char;
|
|
|
+ i : integer;
|
|
|
+begin
|
|
|
+ for i:= 1 to MaxEraCount do
|
|
|
+ begin
|
|
|
+ EraNames[i] := ''; EraYearOffsets[i] := -1;
|
|
|
+ end;
|
|
|
+ ALCID := GetThreadLocale;
|
|
|
+ if GetLocaleInfo(ALCID , LOCALE_IOPTIONALCALENDAR, buf, sizeof(buf)) <= 0 then exit;
|
|
|
+ ACALID := StrToIntDef(buf,1);
|
|
|
+
|
|
|
+ if ACALID in [3..5] then
|
|
|
+ begin
|
|
|
+ EnumCalendarInfoA(@EnumEraNames, ALCID, ACALID , CAL_SERASTRING);
|
|
|
+ EnumCalendarInfoA(@EnumEraYearOffsets, ALCID, ACALID, CAL_IYEAROFFSETRANGE);
|
|
|
+ end;
|
|
|
+(*
|
|
|
+1 CAL_GREGORIAN Gregorian (localized)
|
|
|
+2 CAL_GREGORIAN_US Gregorian (English strings always)
|
|
|
+3 CAL_JAPAN Japanese Emperor Era
|
|
|
+4 CAL_TAIWAN Taiwan Calendar
|
|
|
+5 CAL_KOREA Korean Tangun Era
|
|
|
+6 CAL_HIJRI Hijri (Arabic Lunar)
|
|
|
+7 CAL_THAI Thai
|
|
|
+8 CAL_HEBREW Hebrew (Lunar)
|
|
|
+9 CAL_GREGORIAN_ME_FRENCH Gregorian Middle East French
|
|
|
+10 CAL_GREGORIAN_ARABIC Gregorian Arabic
|
|
|
+11 CAL_GREGORIAN_XLIT_ENGLISH Gregorian transliterated English
|
|
|
+12 CAL_GREGORIAN_XLIT_FRENCH Gregorian transliterated French
|
|
|
+23 CAL_UMALQURA Windows Vista or later: Um Al Qura (Arabic lunar) calendar
|
|
|
+*)
|
|
|
+end;
|
|
|
|
|
|
procedure GetLocaleFormatSettings(LCID: Integer; var FormatSettings: TFormatSettings);
|
|
|
var
|
|
@@ -744,6 +815,7 @@ begin
|
|
|
|
|
|
Set8087CW(old8087CW);
|
|
|
GetFormatSettings;
|
|
|
+ if SysLocale.FarEast then GetEraNamesAndYearOffsets;
|
|
|
end;
|
|
|
|
|
|
|