[cbuilder:40088] 地域と言語のオプション

92 views
Skip to first unread message

k-mi...@optex-fa.com

unread,
Jul 10, 2009, 7:51:06 AM7/10/09
to cbui...@sfdata.ne.jp
ども、年寄りのC++Builder初心者です

早速ですがソフト起動時に下記の設定値を読み出して動作を振り分けたいのですが
これを調べるコトってできますか?

「コントロールパネル」-「地域と言語のオプション」-「地域オプション」タブ-
「カスタマイズ」-「数値」タブ-「区切り記号」

以上、ご存じの方いらっしゃったらご指導、よろしくお願いいたしますm(_ _)m


Tokuji Sato

unread,
Jul 10, 2009, 10:41:24 AM7/10/09
to cbui...@sfdata.ne.jp
徳治です。

質問には、必ず環境(C++Builder のバージョン、OS など)を書くようにしましょう。
以下は、私の C++Builder 6 を元に回答いたします。

> 早速ですがソフト起動時に下記の設定値を読み出して動作を振り分けたいのですが
> これを調べるコトってできますか?
>
> 「コントロールパネル」-「地域と言語のオプション」-「地域オプション」タブ-
> 「カスタマイズ」-「数値」タブ-「区切り記号」

SysUtils の ListSeparator で取得できますが、
「区切り記号」に2文字以上を指定するとうまく動作しないようです。
2文字以上に対応するには、GetLocaleInfo という Windows API で取得します。
例えば、次の通りです。

//--------------------------------------------------------------------------
// GetLocaleInfo API を使いやすくする関数
AnsiString __fastcall GetLocaleString(LCID lcid, LCTYPE lctype)
{
const int length = ::GetLocaleInfo(lcid, lctype, NULL, 0);
if (0 >= length)
{
return AnsiString();
}

AnsiString data;
data.SetLength(length);

const int result = ::GetLocaleInfo(lcid, lctype, data.c_str(), length);
if (0 >= result)
{
return AnsiString();
}

return data;
}
//--------------------------------------------------------------------------
// 使用例
void f()
{
AnsiString slist = GetLocaleString(LOCALE_USER_DEFAULT, LOCALE_SLIST);
}
//--------------------------------------------------------------------------

ところで 上記の GetLocaleString() とほぼ同様の関数として、
SysUtils の GetLocaleStr() がありましたが、ヘルプには載っていませんでした。
もし GetLocaleStr() が使えるようでしたら、こちらの方が簡単です。
この関数には255文字までという制約はありますが、ほとんど問題にならないでしょう。

AnsiString slist = GetLocaleStr(LOCALE_USER_DEFAULT, LOCALE_SLIST, "");

-----------------------------------------------------------
Name : 佐藤 徳治 _∈l ̄\_[]
E-Mail : qs6t...@asahi-net.or.jp ∠◯_[__]◯l
-----------------------------------------------------------

k-mi...@optex-fa.com

unread,
Jul 12, 2009, 7:50:54 PM7/12/09
to cbui...@sfdata.ne.jp
ミサワです

>徳治様、複数文字対応まで詳細な回答有り難うございました
早速、参考にさせて頂きます
どうも有り難うございました
今後ともよろしくお願いいたします

あっと失礼しました今更ですが
開発環境は
C++Builder6.0professional
WindowsXP sp2 日本語

ですが
ソフトの使用環境は
WindowsXP,VISTA,7で多言語対応です

CSVファイルを作ったら欧州の言語のWindowsではセルが区切られず
よくよく調べるとセパレータ文字に";"が使われていました
CSVは (comma separated value)のはずなのに・・・
必ずしも名前と仕様は合致しないんですね・・・

KGH0...@nifty.ne.jp

unread,
Jul 12, 2009, 10:35:49 PM7/12/09
to cbui...@sfdata.ne.jp
荒井です。

ミサワさん wrote at 2009/07/13 8:50:54 in "[cbuilder:40099] Re: 地域と言語のオプション"


> CSVファイルを作ったら欧州の言語のWindowsではセルが区切られず
> よくよく調べるとセパレータ文字に";"が使われていました
> CSVは (comma separated value)のはずなのに・・・
> 必ずしも名前と仕様は合致しないんですね・・・

欧州では小数点として“,”を使いますから、“,”はCSV区切りとしては使えな
いんですよね。(替わりに、3桁毎の区切りは“.”になる....)

-----------------------------------------------------------------------
荒井 嗣行 (Arai,Hideyuki)


Reply all
Reply to author
Forward
0 new messages