2012-02-01 6 views

risposta

12

si hanno due opzioni

1) utilizzare la versione sovraccarico che utilizza una stringa invece di un TLocaleID

class function Create(const LocaleName: string): TFormatSettings; overload; static; 

2) disattivare l'avviso localmente

{$WARN SYMBOL_PLATFORM OFF} 
    fSettings := TFormatSettings.Create(LOCALE_USER_DEFAULT); 
{$WARN SYMBOL_PLATFORM ON} 
+5

Opzione 3. Disabilitare l'avviso globalmente. Se non si costruisce mai per piattaforme diverse da Windows, non ha molto senso attivarlo. –

+0

Se scelgo di utilizzare la versione della stringa, qual è la stringa equivalente a LOCALE_USER_DEFAULT? – croceldon

+0

prova ad usare una stringa vuota o il costruttore senza parametri, questo chiamerà il [GetThreadLocale] (http://msdn.microsoft.com/en-us/library/windows/desktop/dd318127%28v=vs.85%29. aspx) funzionano internamente. state attenti con le chiamate a 'SetThreadLocale' perché possono cambiare il risultato di questa funzione. – RRUZ

2

Ci sono diversi sovraccarichi di TFormatSettings.Create. Quello con un LCID è specifico per Windows. Quello senza parametri e quello che prende un nome di locale come una stringa sono più portabili.

Oppure si potrebbe sopprimere l'avviso per unità e procedure specifiche della piattaforma, se si sa che il software non verrà mai utilizzato per scopi diversi da Delphi per Windows. Il VCL contiene tracce di piattaforme ora non supportate come Linux (Kylix) e .NET (Delphi.NET), e dal momento che sono morti come può essere, rendere il tuo codice portatile su quelle piattaforme può essere una perdita di tempo.

2

Il mio codice è ora scritto come segue:

{$IFDEF VER220} 
    FormatSettings := TFormatSettings.Create(GetThreadLocale); 
{$ELSE} 
    GetLocaleFormatSettings(GetThreadLocale, FormatSettings); 
{$ENDIF} 

Probabilmente si vorrà regolare l'IFDEF per le future versioni appropriate, ma ciò darà l'idea.

+0

Questo snippet in realtà è di grandezza più specifico della piattaforma di cui si lamenta il compilatore. – OnTheFly

+0

@ user539484 Forse, ma IIRC l'ho ricevuto dall'aiuto come metodo consigliato. – mj2008

Problemi correlati