2

为什么LongMonthNames[X]单独(没有名称空间前缀)在 Delphi XE7 中不起作用,而在 Delphi XE2 中起作用?

program LongMonthNames_Test;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils;

begin
  try
    // Works in both Delphi XE2 and Delphi XE7:
    Writeln(System.SysUtils.FormatSettings.LongMonthNames[12]);

    // Works only in Delphi XE2, does NOT work in Delphi XE7:
    // ("not work" obviously means does not compile because of errors in the source code)
    Writeln(LongMonthNames[12]);

    Readln;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.
4

1 回答 1

8

在 XE2 中,单元LongMonthNames中仍然是它自己的全局变量(deprecated在 XE 中)SysUtils。在 XE3 中,该变量已被删除。您必须使用 的LongMonthNames成员TFormatSettings,该成员在单元中有一个全局变量SysUtils

var
  // Note: Using the global FormatSettings formatting variables is not thread-safe.
  FormatSettings: TFormatSettings;

您不必编写完全合格的路径,只需FormatSettings.LongMonthNames[x]

Writeln(FormatSettings.LongMonthNames[12]);

如果您创建自己的 实例TFormattSettings,则在线程中使用是安全的(只要您遵守通常的线程安全规则):

var
  Fmt: TFormatSettings;
begin
  Fmt := TFormatSettings.Create;
  Writeln(Fmt.LongMonthNames[12]);
end;
于 2014-12-08T13:07:15.787 回答