Dans Delphi, comment peut-on afficher des types de données de devise dans différentes devises et sous différentes formes?
Question
Je dois écrire une application Delphi qui extrait des entrées de différentes tables d'une base de données. Différentes entrées seront dans différentes devises. Par conséquent, je dois afficher un nombre différent de décimales et un caractère monétaire différent pour chaque type de données monétaire ($, livres, euros, etc.) en fonction de la devise de l'élément que j'ai chargé.
Existe-t-il un moyen de modifier la devise de manière quasi globale, c'est-à-dire pour toutes les données de devise affichées dans un formulaire?
La solution
Même avec la même devise, il se peut que vous deviez afficher des valeurs avec un format différent (séparateurs, par exemple). Je vous conseillerais donc d'associer une LOCALE au lieu de la devise avec vos valeurs.
Vous pouvez utiliser un simple entier pour contenir le LCID (ID de paramètres régionaux).
Consultez la liste ici: http://msdn.microsoft.com/en-us /library/0h88fahh.aspx
Ensuite, pour afficher les valeurs, utilisez quelque chose comme:
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;
Autres conseils
J'utiliserais SysUtils.CurrToStr (valeur: devise; var FormatSettings: TFormatSettings): string;
Je mettrais en place un tableau de TFormatSettings, chaque position étant configurée pour refléter chaque devise prise en charge par votre application. Vous devez définir les champs suivants des paramètres TFormat pour chaque position de tableau: CurrencyString, CurrencyFormat, NegCurrFormat, ThousandSeparator, DecimalSeparator et CurrencyDecimals.