上のコードでは,取得する文字列が長い場合を想定しています.
そこで,一度,必要なサイズの計算をしていますが,
実際にはそんなに長い文字列はあまりありません.
その場合は,Char 型の array (長さを限定する方法)でも十分です.
procedure TForm1.Button1Click(Sender: TObject);
var
Buff : array[0..MAX_PATH-1] of Char; //(MAX_PATH-1)にする必然性はない
CAL_ID : Cardinal;
begin
//初期化
FillChar(Buff, SizeOf(Buff), #0);
//非ユニコード版のDelphiでは,最後の引数の値をSizeOf(Buff)にする
GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_ICALENDARTYPE, @Buff, Length(Buff));
CAL_ID := StrToInt(Buff);
StrKind := '';
EnumCalendarInfo(@EnumCalendarInfoProc, LOCALE_USER_DEFAULT, CAL_ID, CAL_SCALNAME);
MessageBox(Handle, PChar(StrKind), 'カレンダの種類', 0);
end;
|