2008-09-17 17 views
7

J'ai besoin d'écrire une application Delphi qui tire les entrées de différentes tables dans une base de données, et les différentes entrées seront dans des devises différentes. Ainsi, je dois montrer un nombre différent de décimales et un caractère de devise différent pour chaque type de données de devise ($, livres, Euros, etc.) selon la devise de l'article que j'ai chargé.En Delphi, comment pouvez-vous afficher des types de données de devises dans différentes devises sous différentes formes?

Existe-t-il un moyen de modifier la devise presque globalement, c'est-à-dire pour toutes les données de devise affichées dans un formulaire?

Répondre

7

Même avec la même devise, vous devrez peut-être afficher des valeurs avec un format différent (séparateurs par exemple), donc je vous recommande d'associer un LOCALE au lieu de la devise uniquement avec vos valeurs.
Vous pouvez utiliser un nombre entier simple pour contenir le LCID (ID de paramètres régionaux).
Voir 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; 
5

J'utiliserais SysUtils.CurrToStr (Value: Currency; var FormatSettings: TFormatSettings): string;

Je configure 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.