我有这个程序:
procedure Initialize(out FormatSettings: TFormatSettings);
const
LongDayNamesEx : array [1..7] of string = ('Lunedì', 'Martedì', 'Mercoledì', 'Giovedì', 'Venerdì', 'Sabato', 'Domenica');
LongMonthNamesEx : array [1..12] of string = ('Gennaio', 'Febbraio', 'Marzo', 'Aprile', 'Maggio', 'Giugno', 'Luglio', 'Agosto', 'Settembre', 'Ottobre', 'Novembre', 'Dicembre');
begin
FormatSettings := TFormatSettings.Create;
with FormatSettings do
begin
LongDayNames := LongDayNamesEx;
LongMonthNames := LongMonthNamesEx;
end;
end;
我收到有关不兼容类型的错误(E2008)。我怎么能解决这个问题?我不想使用以下内容:
LongDayNames[1] := 'Lunedì';
LongDayNames[2] := 'Martedì';
...
LongDayNames[7] := 'Domenica';
LongMonthNames[1] := 'Gennaio';
LongMonthNames[2] := 'Febbraio';
...
LongMonthNames[12] := 'Dicembre';
如果不是非常必要的话。 谢谢你的帮助。
答案 0 :(得分:5)
你可以这样做:
type
TDayNameArray = array[1..7] of string;
const
LongDayNamesEx: TDayNameArray = ('Måndag', 'Tisdag', 'Onsdag', 'Torsdag',
'Fredag', 'Lördag', 'Söndag');
var
fs: TFormatSettings;
begin
TDayNameArray(fs.LongDayNames) := LongDayNamesEx;
答案 1 :(得分:3)
安德烈亚斯对你提出的直接问题给了你一个很好的答案。
采用不同的方法,我认为您可以通过在初始化对象时传递语言环境来更轻松地解决问题。例如:
FormatSettings := TFormatSettings.Create('it-IT');
意大利语。然后系统将填写特定于语言环境的设置,日期名称,月份名称等。
或者您可能会使用带有区域设置ID的重载更合适。无论如何,你肯定会有这个主意。
答案 2 :(得分:0)
要回答您直接询问的问题,显而易见的解决方案是使用for循环。结合记录助手和打开的数组参数,使其更容易调用:
type
TTFormatSettingsHelper = record helper for TFormatSettings
procedure SetLongDayNames(const Values: array of string);
end;
procedure TTFormatSettingsHelper.SetLongDayNames(const Values: array of string);
var
Index: Integer;
Value: string;
begin
Assert(high(Values)-low(Values)
= high(Self.LongDayNames)-low(Self.LongDayNames));
Index := low(Self.LongDayNames);
for Value in Values do
begin
Self.LongDayNames[Index] := Value;
inc(Index);
end;
end;
然后打电话给你,你只需写:
FormatSettings.SetLongDayNames(['Lunedì', 'Martedì', 'Mercoledì', 'Giovedì',
'Venerdì', 'Sabato', 'Domenica']);