3

私はこの手順を持っています:

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';

厳密に必要でない場合。手伝ってくれてありがとう。

4

3 に答える 3

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;
于 2012-11-20T13:41:59.683 に答える
3

Andreas は、あなたが尋ねた直接の質問に対して適切な回答を提供しました。

別のアプローチを取ると、オブジェクトを初期化するときにロケールを渡すことで、問題をより簡単に解決できると思います。例えば:

FormatSettings := TFormatSettings.Create('it-IT');

イタリアン用。次に、システムがロケール固有の設定、曜日名、月名などを入力します。

あるいは、ロケール ID を受け取るオーバーロードを使用する方が適切かもしれません。とにかく、あなたは確かにその考えを理解します。

于 2012-11-20T14:09:24.853 に答える
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']);
于 2012-11-20T19:57:15.430 に答える