Как сделать подкомпоненты TAction доступными во время разработки?

В своем пользовательском компоненте я создал несколько TAction-ов в качестве подкомпонентов. Все они опубликованы, но я не мог назначить их во время разработки, так как они не были доступны через инспектор объектов.

Как сделать их «повторяемыми» инспектором объектов? Я пытался установить владельца действий для владельца пользовательского компонента (который является формой хостинга), но безуспешно.

РЕДАКТИРОВАТЬ: похоже, Embarcadero изменил поведение Delphi IDE, связанные с этой проблемой. Если вы используете версии Delphi до XE, вы должны использовать решение из моего собственного ответа. Для XE и выше, вы должны использовать решение от Крейга Петерсона.

РЕДАКТИРОВАТЬ: я добавил свой собственный ответ, который решает проблему, т. Е. Путем создания экземпляра 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;

Ответы на вопрос(3)

Ваш ответ на вопрос