2012-02-01 764 views

回答

12

你有兩個選擇

1)使用,它使用一個字符串,而不是一個TLocaleID

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

2)過載版本禁用警告當地

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

選項3.全局禁用警告。如果你永遠不會爲Windows之外的其他平臺構建,那麼根本沒有必要啓用它。 – 2012-02-01 17:20:56

+0

如果我選擇使用字符串版本,那麼等同於LOCALE_USER_DEFAULT的字符串是什麼? – croceldon 2012-02-01 18:49:35

+0

嘗試使用空字符串或不帶參數的構造函數,這將調用[GetThreadLocale](http://msdn.microsoft.com/en-us/library/windows/desktop/dd318127%28v=vs.85%29。 aspx)函數內部。只需要注意對'SetThreadLocale'的調用,因爲可以改變這個函數的結果。 – RRUZ 2012-02-01 18:59:59

2

TFormatSettings.Create有不同的重載。具有LCID的那個特定於Windows。沒有任何參數的人和將區域名稱作爲字符串的人更具可移植性。

或者,如果您知道您的軟件永遠不會用於Delphi for Windows以外的其他任何軟件,您可以取消特定於平臺的單元和過程的警告。 VCL包含現在不受支持的平臺(如Linux(Kylix)和.NET(Delphi.NET))的痕跡,並且由於它們已經死亡,所以將代碼移植到這些平臺可能會浪費時間。

2

我的代碼是現在寫法如下:

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

您可能想要調整該IFDEF以適合未來版本,但它提供了這個想法。

+0

這段代碼實際上是比編譯器所抱怨的更嚴格的平臺。 – OnTheFly 2012-02-01 18:43:38

+0

@ user539484也許,但是IIRC我從推薦的方式得到了幫助。 – mj2008 2012-02-02 09:29:36

相關問題