2012-02-01 37 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

相关问题