Como acessar a Ação do Item de Menu

Delphi

10/04/2004

Caros amigos , tenho uma aplicação que executa uma verificação na abertura e configura ( liga ou desliga ) os menus de acordo com o usuário. Escrevendo o código ficou facil habilitar os menus de acordo com uma tabela que comtem os nomes de menu , se esta habilitado para aquele usuário , etc... , tudo muito didático , ate que resolvi transformar todas as chamadas de telas em Ações ( TAction ).
Com um loop FOR habilito as ações de acordo com os usuários e dá tudo certo ( olha o código ai :

with FrmPrincipal do
begin
for nAux := 0 to ComponentCount-1 do
begin
{ Liga as Acoes Comuns a Todos Usuários }
if Components[nAux] is TAction then
begin
if TAction(Components[nAux]).Category = ´Controle´ then TAction(Components[nAux]).enabled := True;
if TAction(Components[nAux]).Category = ´Utilitarios´ then TAction(Components[nAux]).enabled := True;
if TAction(Components[nAux]).Category = ´Ajuda´ then TAction(Components[nAux]).enabled := True;

) , bacana e funcional.
Bom... aí é que entra o problema , quero habilitar os menus de acordo com as ações , ou seja , só preciso trabalhar a habilitação da ação para que os menus respectivos tambem sejam habiltados , evitando muitas linhas de codigo que ja estao escritas e que desejo eliminar.

Tentei o seguinte e não consegui sucesso : if Components[nAux] is TMenuItem then
TMenuItem(Components[nAux]).Enabled:=TAction(TMenuItem(Components[nAux]).Action.Name).Enabled;

Preciso saber se a Ação do Item de Menu esta Enabled ou não.

Alguem tem uma solução ...?


Smartsistemas

Smartsistemas

Curtidas 0

Respostas

Emerson Nascimento

Emerson Nascimento

10/04/2004

creio que vc já saiba, mas vc precisa fazer isso em dois passos: primeiro verificando as ações, depois vetificando os itens de menu.

pra resolver o seu problema basta corrigir a linha:
if (Components[nAux] is TMenuItem) and (TMenuItem(Components[nAux]).Action <> nil) then
    TMenuItem(Components[nAux]).Enabled := TAction(TMenuItem(Components[nAux]).Action).Enabled;

note que na verificação da ação [b:2b7e0eca9e]não é utilizada a propriedade name[/b:2b7e0eca9e].


GOSTEI 0
POSTAR