Как использовать TFormatSettings.Create, не будучи специфичным для платформы? - PullRequest
7 голосов
/ 01 февраля 2012

У меня есть следующее в Delphi XE:

fSettings := TFormatSettings.Create(LOCALE_USER_DEFAULT);

Но я всегда получаю предупреждение при компиляции:

W1002 Symbol 'Create' is specific to a platform

Как правильно сделать это, чтобы я не получил предупреждение?

Ответы [ 3 ]

13 голосов
/ 01 февраля 2012

У вас есть две опции

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}
2 голосов
/ 01 февраля 2012

Мой код теперь написан следующим образом:

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

Возможно, вы захотите настроить этот IFDEF для соответствующих будущих версий, но он дает идею.

2 голосов
/ 01 февраля 2012

Существуют различные перегрузки TFormatSettings.Create. Тот, с LCID, специфичен для Windows. Тот, у которого нет параметров, и тот, который принимает имя локали в виде строки, более переносим.

Или вы можете отключить предупреждение для платформенных модулей и процедур, если знаете, что ваше программное обеспечение никогда не будет использоваться ни для чего, кроме Delphi для Windows. VCL содержит следы неподдерживаемых в настоящее время платформ, таких как Linux (Kylix) и .NET (Delphi.NET), и, поскольку они настолько мертвы, насколько это возможно, сделать ваш код переносимым на эти платформы может быть пустой тратой времени.

...