0

LinuxのLazarusでは、クラスをコンポーネントとして登録して、フォームにドロップできるようにしました。

公開できるプロパティが文字列や整数などの単純な型に制限されていることを除けば、チャームのように機能します。
TStringListやTImageなどのプロパティを公開しようとすると、オブジェクトインスペクターでクリックすると、「アクセス違反」が発生します。

コードを標準コンポーネントと比較しましたが、それらがどのように異なって動作しているかがわかりません。

では、オブジェクトインスペクターでそのようなプロパティを使用するために必要な追加の手順は何ですか?

4

2 に答える 2

2

クラス プロパティをプルするには、次のことを行う必要があります。 1. コンポーネント コンストラクター内でそのプロパティを作成します。つまり、nil になることはありません。 2. プロパティ セッターで、新しい値からコンポーネントに割り当てる必要があります。そのため、Assign メソッドまたは AssignTo をコンポーネントに実装する必要があります。例えば

TMyComponent = class
private
  FString: TStrings;
published
  property Strings: TStrings read FStrings write SetStrings;
end;

constructor TMyComponent.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  // always create it in the constructor so it will not be nil
  FStrings := TStringList.Create;
end;

procedure TMyComponent.SetStrings(const AValue: TStrings);
begin
  // this is correct statement
  FStrings.Assign(AValue);
  // this is not correct
  // FStrings := AValue;
end;
于 2011-02-05T04:12:42.057 に答える
0

これは Delphi とほぼ同じだと思います。複雑な型を設計時に使用するには、それらの表示/編集を処理する設計時のコードが必要です。

于 2010-01-26T12:05:53.073 に答える