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; |