在Delphi中处理TMenuItem.Action.Visible的更改

在Delphi中处理TMenuItem.Action.Visible的更改,delphi,Delphi,在Delphi中,我想处理菜单项的TMenuItem.Action.Visible属性的更改。这是作为弹出菜单项放置在TAdvGlowButton.DropDownMenu属性中的 首先,我尝试使用traction的OnUpdate事件,但当菜单弹出时,该事件出现得太晚,而不是当Visible属性的更改真正完成时 同样,用处理程序覆盖菜单项的ActionLink.OnChange属性也没有帮助,该处理程序同时执行源处理程序和自己的处理程序 有人有办法解决这个问题吗 我希望在设置Visible属性

在Delphi中,我想处理菜单项的
TMenuItem.Action.Visible
属性的更改。这是作为弹出菜单项放置在
TAdvGlowButton.DropDownMenu
属性中的

首先,我尝试使用
traction
OnUpdate
事件,但当菜单弹出时,该事件出现得太晚,而不是当
Visible
属性的更改真正完成时

同样,用处理程序覆盖菜单项的
ActionLink.OnChange
属性也没有帮助,该处理程序同时执行源处理程序和自己的处理程序

有人有办法解决这个问题吗


我希望在设置
Visible
属性时引发事件处理程序,而不仅仅是在弹出菜单时


这些动作不是我创造的。因此,我无法更改它们的类型以使此事件可从外部访问(protected->public)。

更改操作的
Visible
属性的明显位置是其
OnChange
事件。不幸的是,这个事件不是公开的,更不用说公开了

然而,有一种方法可以通过使用
类帮助程序
将事件处理程序设置为
OnChange
事件

在新(或合适的现有)单元中创建
类帮助器
。这是一个工作示例:

unit ActionHelper;

interface

type
  TActionHelper = class helper for TBasicAction
  private
    function GetOnChange: TNotifyEvent;
    procedure SetOnChange(const Value: TNotifyEvent);
  public
    property OnChange: TNotifyEvent read GetOnChange write SetOnChange;
  end;

implementation

function TActionHelper.GetOnChange: TNotifyEvent;
begin
  Result := inherited OnChange;
end;

procedure TActionHelper.SetOnChange(const Value: TNotifyEvent);
begin
  inherited OnChange := Value;
end;

end.
无论何时将此单元添加到uses子句,都可以将任何
TBasicAction
子体的
OnChange
属性连接到适当的事件处理程序


尽管此till不允许在对象检查器中连接
OnChange
事件,但它是一种非常方便的方式,可以在某些操作属性更改时获得通知。

更改操作的
可见
属性的明显位置是其
OnChange
事件。不幸的是,这个事件不是公开的,更不用说公开了

然而,有一种方法可以通过使用
类帮助程序
将事件处理程序设置为
OnChange
事件

在新(或合适的现有)单元中创建
类帮助器
。这是一个工作示例:

unit ActionHelper;

interface

type
  TActionHelper = class helper for TBasicAction
  private
    function GetOnChange: TNotifyEvent;
    procedure SetOnChange(const Value: TNotifyEvent);
  public
    property OnChange: TNotifyEvent read GetOnChange write SetOnChange;
  end;

implementation

function TActionHelper.GetOnChange: TNotifyEvent;
begin
  Result := inherited OnChange;
end;

procedure TActionHelper.SetOnChange(const Value: TNotifyEvent);
begin
  inherited OnChange := Value;
end;

end.
无论何时将此单元添加到uses子句,都可以将任何
TBasicAction
子体的
OnChange
属性连接到适当的事件处理程序


尽管此till不允许在对象检查器中连接
OnChange
事件,但它是一种非常方便的方式,可以在某些操作属性发生更改时获得通知。

通常,您使用操作的
OnUpdate
事件处理程序进行此操作。这对我来说一直很有效。您可能希望更清楚地了解您需要什么。我希望在设置Visible属性时,而不仅仅是在弹出菜单时,引发事件处理程序。那么操作的OnChange事件呢?而不是ActionLink?这些操作不是我创建的。因此,我无法更改它们的类型以使此事件可从外部访问(protected->public)。通常,您使用操作的
OnUpdate
事件处理程序进行此操作。这对我来说一直很有效。您可能希望更清楚地了解您需要什么。我希望在设置Visible属性时,而不仅仅是在弹出菜单时,引发事件处理程序。那么操作的OnChange事件呢?而不是ActionLink?这些操作不是我创建的。因此,我无法更改它们的类型以使此事件可从外部访问(protected->public)