From 2d8ac256cfe6cfbf846f0b67ce679c4876b92c62 Mon Sep 17 00:00:00 2001 From: marco Date: Wed, 11 Aug 2010 08:29:47 +0000 Subject: [PATCH] * First era patch of Taka_JP. git-svn-id: trunk@15775 - --- rtl/win/sysutils.pp | 72 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/rtl/win/sysutils.pp b/rtl/win/sysutils.pp index 1c349a0958..9dc01d7105 100644 --- a/rtl/win/sysutils.pp +++ b/rtl/win/sysutils.pp @@ -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;