» Help

How to implement an OnAfterExecute event in a TActionList

   
Question
In a TActionList, there is an event OnExecute, which is called before executing an action. Now I would like to enhance TActionList with an event OnAfterExecute, which is called when the execution of any action is finished. I looked at the VCL code, but for me it's not clear, where and how to add this feature in a subclass of TActionList.
unit MyActionList;
 
interface
 
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ActnList;
 
type
  TMyActionList = class(TActionList)
  private
    FOnAfterExecute: TActionEvent;
    SOnExecute: TActionEvent;
  protected
    procedure Loaded; override;
    procedure DoOnExecute(Action: TBasicAction; var Handled: Boolean);
  published
    property OnAfterExecute: TActionEvent 
      read FOnAfterExecute write FOnAfterExecute;
  end;
 
procedure Register;
 
implementation
 
procedure Register;
begin
  RegisterComponents('Samples', [TMyActionList]);
end;
 
{ TMyActionList }
 
procedure TMyActionList.DoOnExecute(Action: TBasicAction; var Handled: Boolean);
begin
  if Assigned(SOnExecute) then
  begin
    SOnExecute(Action, Handled);
    if Assigned(OnAfterExecute) then
      OnAfterExecute(Action, Handled);
  end;
end;
 
 
procedure TMyActionList.Loaded;
begin
  inherited;
  SOnExecute := OnExecute;
  OnExecute := DoOnExecute;
end;
 
end.
Original resource: The Delphi Pool
Author: Igor Glukhov
Added: 2013-01-27
Last updated: 2013-01-27

« Return to contents »