Saber se evento click do menu está associado a determinada procedure

Top  Previous 

Definição

Tenho uma lista com todos os TMenuItems de um TMenu.

O usuário clica num item desta lista e pressiona um botão.

90% dos menus apontam para o mesmo evento no click - neste exemplo mClientesClick.

Como saber QUAIS menus apontam para este evento e quais não?

Fonte

uses MainUnit, TypInfo

 

var

  Dado  : pDado;

  Imenu : TMenuItem;

  Method: TMethod;

 

begin

  // associa o nome ao FindComponent do Main

  IMenu := TMenuItem(MainForm.FindComponent('mCadastroOtarios'));

  if not Assigned(IMenu) then

    Exit;

  // pega as propriedades do onClick dele

  Method := GetMethodProp(IMenu, 'OnClick');

 

  // tem OnClick associado?

  mDlg.InformaAbort(IMenu.Caption = '-''Este menu não pode ser aberto');

  mDlg.InformaAbort(not Assigned(Method.Code) or not Assigned(Method.Data), 'Este menu não pode ser aberto, selecione um sub-item do mesmo');

  mDlg.InformaAbort(not IMenu.Enabled, 'Você não tem permissão para abrir este menu. Fale com o administrador');

 

  // se tem dados para o OnClick e ele aponta para o mesmo endereço de memória do mClientesClick...

  if Method.Code = Pointer(@TMainForm.mClientesClick) then

    MainForm.mClientesClick(IMenu)  // chama o método master

  else

    IMenu.Click;  // senão chama o click normal

end;