カスタム コンポーネントで、いくつかの TAction をサブコンポーネントとして作成しました。それらはすべて公開されていますが、オブジェクト インスペクタからは利用できなかったため、設計時に割り当てることができませんでした。
オブジェクトインスペクターでそれらを「反復可能」にするにはどうすればよいですか? アクションの所有者をカスタム コンポーネント (ホスティング フォーム) の所有者に設定しようとしましたが、成功しませんでした。
編集: Embarcadero がこの問題に関連する Delphi IDE の動作を変更したようです。XE より前のバージョンの Delphi を使用している場合は、私自身の回答のソリューションを使用する必要があります。XE 以降では、Craig Peterson のソリューションを使用する必要があります。
編集: 問題を解決する独自の回答を追加しました。つまり、カスタム コンポーネントで TCustomActionList インスタンスを作成し、その所有者をホスティング フォーム (カスタム コンポーネントの所有者) に設定します。ただし、TCustomActionList のインスタンスは冗長だと思うので、このソリューションにはあまり満足していません。だから私はまだより良い解決策を得ることを望んでいます。
編集:コードサンプルを追加
uses
.., ActnList, ..;
type
TVrlFormCore = class(TComponent)
private
FCancelAction: TBasicAction;
FDefaultAction: TBasicAction;
FEditAction: TBasicAction;
protected
procedure DefaultActionExecute(ASender: TObject); virtual;
procedure CancelActionExecute(ASender: TObject); virtual;
procedure EditActionExecute(ASender: TObject); virtual;
public
constructor Create(AOwner: TComponent); override;
published
property DefaultAction: TBasicAction read FDefaultAction;
property CancelAction : TBasicAction read FCancelAction;
property EditAction : TBasicAction read FEditAction;
end;
implementation
constructor TVrlFormCore.Create(AOwner: TComponent);
begin
inherited;
FDefaultAction := TAction.Create(Self);
with FDefaultAction as TAction do
begin
SetSubComponent(True);
Caption := 'OK';
OnExecute := DefaultActionExecute;
end;
FCancelAction := TAction.Create(Self);
with FCancelAction as TAction do
begin
SetSubComponent(True);
Caption := 'Cancel';
OnExecute := Self.CancelActionExecute;
end;
FEditAction := TAction.Create(Self);
with FEditAction as TAction do
begin
SetSubComponent(True);
Caption := 'Edit';
OnExecute := Self.EditActionExecute;
end;
end;