我在德尔福XE以下几点:如何使用TFormatSettings.Create而不是特定于平台?
fSettings := TFormatSettings.Create(LOCALE_USER_DEFAULT);
但我始终得到编译警告:
W1002 Symbol 'Create' is specific to a platform
什么是做这种正确的方法,让我没有得到一个警告?
我在德尔福XE以下几点:如何使用TFormatSettings.Create而不是特定于平台?
fSettings := TFormatSettings.Create(LOCALE_USER_DEFAULT);
但我始终得到编译警告:
W1002 Symbol 'Create' is specific to a platform
什么是做这种正确的方法,让我没有得到一个警告?
你有两个选择
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}
TFormatSettings.Create
有不同的重载。具有LCID的那个特定于Windows。没有任何参数的人和将区域名称作为字符串的人更具可移植性。
或者,如果您知道您的软件永远不会用于Delphi for Windows以外的其他任何软件,您可以取消特定于平台的单元和过程的警告。 VCL包含现在不受支持的平台(如Linux(Kylix)和.NET(Delphi.NET))的痕迹,并且由于它们已经死亡,所以将代码移植到这些平台可能会浪费时间。
我的代码是现在写法如下:
{$IFDEF VER220}
FormatSettings := TFormatSettings.Create(GetThreadLocale);
{$ELSE}
GetLocaleFormatSettings(GetThreadLocale, FormatSettings);
{$ENDIF}
您可能想要调整该IFDEF以适合未来版本,但它提供了这个想法。
选项3.全局禁用警告。如果你永远不会为Windows之外的其他平台构建,那么根本没有必要启用它。 – 2012-02-01 17:20:56
如果我选择使用字符串版本,那么等同于LOCALE_USER_DEFAULT的字符串是什么? – croceldon 2012-02-01 18:49:35
尝试使用空字符串或不带参数的构造函数,这将调用[GetThreadLocale](http://msdn.microsoft.com/en-us/library/windows/desktop/dd318127%28v=vs.85%29。 aspx)函数内部。只需要注意对'SetThreadLocale'的调用,因为可以改变这个函数的结果。 – RRUZ 2012-02-01 18:59:59