Обработка изменения TMenuItem.Action.Visible в Delphi - PullRequest
0 голосов
/ 27 января 2020

in Delphi Я хочу обработать изменение свойства TMenuItem.Action.Visible для пункта меню. Это помещается как элемент всплывающего меню в свойстве TAdvGlowButton.DropDownMenu.

Сначала я попытался использовать событие OnUpdate для TAction, но это происходит слишком поздно, когда всплывающее меню, а не когда изменение свойства Visible действительно выполнено.

Также не помогает перезапись свойства ActionLink.OnChange элемента меню с помощью обработчика, который выполняет как исходный, так и собственный обработчик.

У кого-нибудь есть идея решить эту проблему?

Я хочу, чтобы обработчик событий вызывался при установке свойства Visible, а не только при всплывающем меню.

Действия не созданы мной. Поэтому я не могу изменить их тип, чтобы сделать это событие доступным извне (protected -> publi c).

1 Ответ

2 голосов
/ 27 января 2020

Очевидным местом действия по изменению свойства Visible действия является его событие OnChange. К сожалению, это событие не public, не говоря уже о published.

Тем не менее, существует способ установить обработчик события на событие OnChange, используя class helper.

Создайте class helper в новом (или подходящем существующем) подразделении. Это рабочий пример:

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.

Всякий раз, когда вы добавляете этот модуль к предложению использования, вы сможете подключить свойство OnChange любого потомка TBasicAction к соответствующему обработчику событий.

Хотя это касание не позволяет связать событие OnChange в Инспектор объектов , это довольно удобный способ получать уведомления при изменении какого-либо свойства действия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...