Em Delphi, como você pode ter tipos de dados de moeda mostrado em diferentes moedas de diferentes formas?
Pergunta
Eu preciso escrever uma aplicação Delphi que puxa as entradas a partir de várias tabelas em um banco de dados e diferentes entradas estarão em diferentes moedas. Assim, eu preciso mostrar um número diferente de casas decimais e um caráter moeda diferente para cada tipo de dados de moeda ($, libras, euros, etc), dependendo da moeda do item I já carregado.
Existe uma maneira de alterar a moeda quase todo o mundo, isto é, para todos os dados de moeda mostrados em um formulário?
Solução
Mesmo com a mesma moeda, você pode ter que exibir valores com um formato diferente (separadores, por exemplo), então eu recomendo que você associa um local em vez da moeda única com os seus valores.
Você pode usar um simples Integer para segurar o LCID (ID de localidade).
Veja a lista aqui: http://msdn.microsoft.com/en-us /library/0h88fahh.aspx
Em seguida, para exibir os valores, use algo como:
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;
Outras dicas
Eu usaria SysUtils.CurrToStr (Valor: Moeda; var FormatSettings: TFormatSettings): string;
Eu tinha configurar uma variedade de TFormatSettings, cada posição configurado para refletir cada moeda seus suportes de aplicação. Você precisará definir os seguintes campos das Configurações TFormat para cada posição array:. CurrencyString, CurrencyFormat, NegCurrFormat, ThousandSeparator, DecimalSeparator e CurrencyDecimals