"LongMonthNames" 无法识别变量?
"LongMonthNames" variable not recognized?
我的单元中有此代码:
unit clsDate_u;
interface
type
TDate = class(TObject)
private
fDay, fMonth, fYear : integer;
public
constructor Create(sDate: string);
function MonthName: string;
function DaysPassedInYear: integer;
function LongDate: string;
function GetDay: integer;
function GetMonth: integer;
function GetYear: integer;
end;
implementation
{ TDate }
uses
SysUtils, DateUtils;
constructor TDate.Create(sDate: string);
begin
fDay := StrToInt(copy(sDate,1,2));
fMonth := StrToInt(copy(sDate,4,2));
fYear := StrToInt(copy(sDate,7,2));
if fYear <= 29 then
fYear := fYear + 2000
else
fYear := fYear + 1900;
end;
function TDate.DaysPassedInYear: integer;
var
iTotal, iCount: integer;
begin
iTotal := 0;
iCount := 1;
while iCount < fMonth do
begin
iTotal := iTotal + DaysInAMonth(fYear, iCount);
Inc(iCount);
end;
iTotal := iTotal + fDay;
result := iTotal;
end;
function TDate.GetDay: integer;
begin
result := fDay;
end;
function TDate.GetMonth: integer;
begin
result := fMonth;
end;
function TDate.GetYear: integer;
begin
result := fYear;
end;
function TDate.MonthName: string;
begin
result := LongMonthNames[fMonth];
end;
function TDate.LongDate: string;
begin
result := IntToStr(fDay) + ' ' + MonthName + ' ' + IntToStr(fYear);
end;
end.
我想在我的函数中使用“LongMonthNames”变量,您可以在此处看到:
function TDate.MonthName: string;
begin
result := LongMonthNames[fMonth];
end;
Delphi 说这是一个未声明的标识符并将其视为错误,但实际上我确实在我的 uses 子句中添加了 SysUtils 和 DateUtils。
为什么它无法识别“LongMonthNames”?
我在一个单独的单位工作,但我怀疑这与问题有任何关系。
首先,TDate
是一个糟糕的名字,因为它与标准 Delphi TDate
类型冲突。
其次,您要查找的 LongMonthNames
是 TFormatSettings
记录的成员。因此,要访问此成员,您需要此类记录的实例。
例如,如果您想要本地化的月份名称,您可以使用 TFormatSettings.Create
为当前区域设置创建格式设置记录。
另一方面,如果您想要 non-localized(英文)月份名称,您可以使用 TFormatSettings.Invariant
class 函数。
例如,
var LMonthNames := TFormatSettings.Create.LongMonthNames;
for var LMonthName in LMonthNames do
ShowMessage(LMonthName);
为您提供本地化的月份名称,而
var LMonthNames := TFormatSettings.Invariant.LongMonthNames;
for var LMonthName in LMonthNames do
ShowMessage(LMonthName);
给你non-localized个月的名字。
(显然,在实际代码中您不会每次都重新创建格式设置记录。)
我所要做的就是添加“FormatSettings”。在“LongMonthNames”之前,像这样:
function TDate.MonthName: string;
begin
result := FormatSettings.LongMonthNames[fMonth];
end;
我的单元中有此代码:
unit clsDate_u;
interface
type
TDate = class(TObject)
private
fDay, fMonth, fYear : integer;
public
constructor Create(sDate: string);
function MonthName: string;
function DaysPassedInYear: integer;
function LongDate: string;
function GetDay: integer;
function GetMonth: integer;
function GetYear: integer;
end;
implementation
{ TDate }
uses
SysUtils, DateUtils;
constructor TDate.Create(sDate: string);
begin
fDay := StrToInt(copy(sDate,1,2));
fMonth := StrToInt(copy(sDate,4,2));
fYear := StrToInt(copy(sDate,7,2));
if fYear <= 29 then
fYear := fYear + 2000
else
fYear := fYear + 1900;
end;
function TDate.DaysPassedInYear: integer;
var
iTotal, iCount: integer;
begin
iTotal := 0;
iCount := 1;
while iCount < fMonth do
begin
iTotal := iTotal + DaysInAMonth(fYear, iCount);
Inc(iCount);
end;
iTotal := iTotal + fDay;
result := iTotal;
end;
function TDate.GetDay: integer;
begin
result := fDay;
end;
function TDate.GetMonth: integer;
begin
result := fMonth;
end;
function TDate.GetYear: integer;
begin
result := fYear;
end;
function TDate.MonthName: string;
begin
result := LongMonthNames[fMonth];
end;
function TDate.LongDate: string;
begin
result := IntToStr(fDay) + ' ' + MonthName + ' ' + IntToStr(fYear);
end;
end.
我想在我的函数中使用“LongMonthNames”变量,您可以在此处看到:
function TDate.MonthName: string;
begin
result := LongMonthNames[fMonth];
end;
Delphi 说这是一个未声明的标识符并将其视为错误,但实际上我确实在我的 uses 子句中添加了 SysUtils 和 DateUtils。
为什么它无法识别“LongMonthNames”?
我在一个单独的单位工作,但我怀疑这与问题有任何关系。
首先,TDate
是一个糟糕的名字,因为它与标准 Delphi TDate
类型冲突。
其次,您要查找的 LongMonthNames
是 TFormatSettings
记录的成员。因此,要访问此成员,您需要此类记录的实例。
例如,如果您想要本地化的月份名称,您可以使用 TFormatSettings.Create
为当前区域设置创建格式设置记录。
另一方面,如果您想要 non-localized(英文)月份名称,您可以使用 TFormatSettings.Invariant
class 函数。
例如,
var LMonthNames := TFormatSettings.Create.LongMonthNames;
for var LMonthName in LMonthNames do
ShowMessage(LMonthName);
为您提供本地化的月份名称,而
var LMonthNames := TFormatSettings.Invariant.LongMonthNames;
for var LMonthName in LMonthNames do
ShowMessage(LMonthName);
给你non-localized个月的名字。
(显然,在实际代码中您不会每次都重新创建格式设置记录。)
我所要做的就是添加“FormatSettings”。在“LongMonthNames”之前,像这样:
function TDate.MonthName: string;
begin
result := FormatSettings.LongMonthNames[fMonth];
end;