В моем пользовательском компоненте я создал некоторые TAction-s в качестве подкомпонентов. Все они опубликованы, но я не мог назначить их во время разработки, поскольку они недоступны через инспектора объектов.Как сделать подкомпонент TAction-s доступным во время разработки?
Как вы можете сделать их «итерируемыми» инспектором объектов? Я попытался установить Владелец действий Владельцу настраиваемого компонента (который является формой Хостинга), чтобы добиться успеха.
EDIT: Похоже, что Embarcadero изменило поведение IDE Delphi, связанное с этой проблемой. Если вы используете версии Delphi до XE, вы должны использовать решение из моего собственного ответа. Для XE и выше вы должны использовать решение от Craig Peterson.
EDIT: Я добавил свой собственный ответ, который решает проблему, т. Е. Создав экземпляр TCustomActionList в моем настраиваемом компоненте и установив его владельца в форму хостинга (владелец настраиваемого компонента). Однако я не очень доволен этим решением, так как я думаю, что экземпляр TCustomActionList является излишним. Поэтому я все еще надеюсь найти лучшее решение.
EDIT: Добавить образец кода
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;
Просто проверяю: вы положили ваш компонент в пакет и установили, что в вашей IDE? –
@Marjan Venema: Yupe, он установлен отлично. В настоящее время мне нужно выполнить проводку в событии OnCreate формы. – Luthfi
@menjaraz: в коде нет ничего особенного, только создано несколько TAction-s и задано в качестве подкомпонента. Но я скоро отправлю код. – Luthfi