Dans Delphi, comment peut-on afficher des types de données de devise dans différentes devises et sous différentes formes?

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

  •  01-07-2019
  •  | 
  •  

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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top