7

データベース内のさまざまなテーブルからエントリを取得する Delphi アプリケーションを作成する必要があり、エントリごとに通貨が異なります。したがって、ロードしたアイテムの通貨に応じて、通貨データ型 ($、ポンド、ユーロなど) ごとに異なる小数点以下の桁数と異なる通貨文字を表示する必要があります。

ほぼグローバルに、つまりフォームに表示されるすべての通貨データに対して通貨を変更する方法はありますか?

4

2 に答える 2

7

同じ通貨であっても、値を別の形式 (区切り文字など) で表示する必要がある場合があるため、通貨の代わりに LOCALE のみを値に関連付けることをお勧めします。
単純な整数を使用して LCID (ロケール ID) を保持できます。
こちらのリストを参照してください: http://msdn.microsoft.com/en-us/library/0h88fahh.aspx

次に、値を表示するには、次のようなものを使用します。

function CurrFormatFromLCID(const AValue: Currency; const LCID: Integer = LOCALE_SYSTEM_DEFAULT): string;
var
  AFormatSettings: TFormatSettings;
begin
  GetLocaleFormatSettings(LCID, AFormatSettings);
  Result := CurrToStrF(AValue, ffCurrency, AFormatSettings.CurrencyDecimals, AFormatSettings);
end;

function USCurrFormat(const AValue: Currency): string;
begin
  Result := CurrFormatFromLCID(AValue, 1033); //1033 = US_LCID
end;

function FrenchCurrFormat(const AValue: Currency): string;
begin
  Result := CurrFormatFromLCID(AValue, 1036); //1036 = French_LCID
end;

procedure TestIt;
var
  val: Currency;
begin
  val:=1234.56;
  ShowMessage('US: ' + USCurrFormat(val));
  ShowMessage('FR: ' + FrenchCurrFormat(val));
  ShowMessage('GB: ' + CurrFormatFromLCID(val, 2057)); // 2057 = GB_LCID
  ShowMessage('def: ' + CurrFormatFromLCID(val));
end;
于 2008-09-17T20:31:42.860 に答える
5

私は SysUtils.CurrToStr(Value: Currency; var FormatSettings: TFormatSettings): string; を使用します。

TFormatSettings の配列をセットアップし、アプリケーションがサポートする各通貨を反映するように各位置を構成します。配列位置ごとに TFormat 設定の次のフィールドを設定する必要があります: CurrencyString、CurrencyFormat、NegCurrFormat、ThousandSeparator、DecimalSeparator、および CurrencyDecimals。

于 2008-09-17T18:46:16.810 に答える