2008-09-17 9 views
7

Ich muss eine Delphi-Anwendung schreiben, die Einträge aus verschiedenen Tabellen in einer Datenbank ruft, und verschiedene Einträge werden in verschiedenen Währungen sein. Daher muss ich für jeden Währungsdatentyp ($, Pfund, Euro usw.) eine andere Anzahl an Dezimalstellen und ein anderes Währungszeichen angeben, abhängig von der Währung des Artikels, den ich geladen habe.Wie können Sie in Delphi Währungsdatentypen in verschiedenen Währungen in verschiedenen Formen anzeigen lassen?

Gibt es eine Möglichkeit, die Währung nahezu global zu ändern, dh für alle in einem Formular angezeigten Währungsdaten?

Antwort

7

Auch mit derselben Währung müssen Sie möglicherweise Werte mit einem anderen Format (z. B. Trennzeichen) anzeigen, daher würde ich empfehlen, dass Sie LOCALE anstelle der Währung nur mit Ihren Werten verknüpfen.
Sie können eine einfache Ganzzahl verwenden, um die LCID (Gebietsschema-ID) zu speichern. hier
die Liste Siehe: http://msdn.microsoft.com/en-us/library/0h88fahh.aspx

dann die Werte angezeigt werden, so etwas wie verwenden:

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

Ich würde SysUtils.CurrToStr (Wert: Währung; var FormatSettings: TFormatSettings) verwenden: string;

Ich würde ein Array von TFormatSettings einrichten, wobei jede Position so konfiguriert ist, dass sie jede von Ihrer Anwendung unterstützte Währung widerspiegelt. Sie müssen die folgenden Felder der TFormat-Einstellungen für jede Array-Position festlegen: CurrencyString, CurrencyFormat, NegCurrFormat, ThousandSeparator, DecimalSeparator und CurrencyDecimals.