В Delphi, как вы можете отображать типы валютных данных в разных валютах в разных формах?

StackOverflow https://stackoverflow.com/questions/86002

  •  01-07-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

Даже при использовании одной и той же валюты вам, возможно, придется отображать значения в другом формате (например, разделители), поэтому я бы рекомендовал вам связать ЯЗЫКОВОЙ СТАНДАРТ вместо валюты только с вашими значениями.
Вы можете использовать простое целое число для хранения LCID (locale 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;

Другие советы

Я бы использовал SysUtils.CurrToStr(Значение:Валюта;настройки формата var:Настройки формата):строка;

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top