В Delphi, как вы можете иметь типы данных валюты, отображаемые в разных валютах в разных формах? - PullRequest
7 голосов
/ 17 сентября 2008

Мне нужно написать приложение Delphi, которое извлекает записи из разных таблиц в базе данных, и разные записи будут в разных валютах. Таким образом, мне нужно показать разное количество десятичных знаков и разные символы валюты для каждого типа данных Currency ($, фунты, евро и т. Д.) В зависимости от валюты загруженного элемента.

Есть ли способ изменить валюту почти глобально, то есть для всех данных валюты, показанных в форме?

Ответы [ 2 ]

7 голосов
/ 18 сентября 2008

Даже с одной и той же валютой вам, возможно, придется отображать значения в другом формате (например, в качестве разделителей), поэтому я бы рекомендовал ассоциировать LOCALE вместо валюты только со своими значениями. Вы можете использовать простое целое число для хранения LCID (языкового идентификатора).
Смотрите список здесь: 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;
5 голосов
/ 17 сентября 2008

Я бы использовал SysUtils.CurrToStr (Значение: Валюта; var FormatSettings: TFormatSettings): string;

Я бы установил массив TFormatSettings, каждая позиция которого настроена на отображение каждой валюты, поддерживаемой вашим приложением. Вам необходимо установить следующие поля настроек TFormat для каждой позиции массива: CurrencyString, CurrencyFormat, NegCurrFormat, ThousandSeparator, DecimalSeparator и CurrencyDecimals.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...