喫茶XRAYトップページ

[スレッド全体
]

[8195] Re:カレンダの種類の取得と設定返信 削除
2014/11/8 (土) 19:38:46 Mr.XRAY
> GetLocaleInfo と SetLocaleInfo で出来るんですね.

結果の文字列をシステムから取得するには,EnumXXX という列挙用の関数を使用します.
この場合,列挙と言っても 1 つだけですが.


var
  StrKind : String;

//-----------------------------------------------------------------------------
//  EnumCalendarInfo関数のコールバック関数
//  EnumCalendarInfo関数を実行すると自動的に呼び出されて実行される関数
//  このような関数をコールバック関数という
//  目的の情報の取得が終了するまで何回も呼び出される
//  取得するべき情報がなくなるか,Result := 0 にするとEnumCalendarInfo関数の
//  次のコードに実行が移る
//----------------------------------------------------------------------------
function EnumCalendarInfoProc(lpLocaleString: PChar): Integer;
begin
  StrKind := lpLocaleString;
  Result  := 1;
end;

//=============================================================================
//  カレンダーの種類を取得
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
var
  StrText : string;
  Size    : Integer;
  CAL_ID  : Cardinal;
begin
  StrKind := '';
  Size := GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_ICALENDARTYPE, nil, 0);
  SetLength(StrText, Size);

  GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_ICALENDARTYPE, PChar(StrText), Size);
  CAL_ID := StrToInt(StrText);

  EnumCalendarInfo(@EnumCalendarInfoProc, LOCALE_USER_DEFAULT, CAL_ID, CAL_SCALNAME);
  MessageBox(Handle, PChar(StrKind), 'カレンダの種類', 0);
end;

[参考]  -- 関数類の MSDN の記事へのリンクあり
[02-01_EnumSystemLocales 関数を使用した入力ロケール一覧]
http://mrxray.on.coocan.jp/Delphi/plSamples/S04_SystemParametersInfo_Interface.htm#02-01



[8196] Re2:カレンダの種類の取得と設定返信 削除
2014/11/9 (日) 01:01:43 Mr.XRAY
上のコードでは,取得する文字列が長い場合を想定しています.
そこで,一度,必要なサイズの計算をしていますが,
実際にはそんなに長い文字列はあまりありません.
その場合は,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;


[8636] Re3:カレンダの種類の取得と設定返信 削除
2015/3/31 (火) 20:39:56 igy
そして、新たに問題が・・・(謎)

win8.1でSetLocaleInfoでエラーを解除するには?
http://hpcgi3.nifty.com/e-papy/DelphiBBS/wwwlng.cgi?print+201503/15030021.txt


[8637] Re4:カレンダの種類の取得と設定返信 削除
2015/3/31 (火) 21:29:06 Mr.XRAY
▼ igyさん

> win8.1でSetLocaleInfoでエラーを解除するには?
> http://hpcgi3.nifty.com/e-papy/DelphiBBS/wwwlng.cgi?print+201503/15030021.txt


なるほど.確かに謎ですね.
システムの起動時と言っても,どんなタイミングかわかませんが,
元の書き込みのことを考慮すると,そういうことはやらない方がいいような
気がします.
自アプリで必要なことは,自アプリ内で処理し,他のアプリに影響を与える
ような変更はしない方がいいと思うんですけどね.


[8638] Re5:カレンダの種類の取得と設定返信 削除
2015/4/1 (水) 00:12:07 Mr.XRAY
> 自アプリで必要なことは,自アプリ内で処理し,他のアプリに影響を与える
> ような変更はしない方がいいと思うんですけどね.


ただ,今回は,目的を達成するにはそれしかないのでしたっけ?
詳しく読んでないので...


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82