Fórum Como acessar a Ação do Item de Menu #225081
10/04/2004
0
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 ...?
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
Curtir tópico
+ 0
Responder
Posts
10/04/2004
Emerson Nascimento
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].
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].
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)