MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

Obrigado

Administração do MaximoAccess

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access

    [Resolvido]Macro AutoKeys com condicional

    Compartilhe
    avatar
    CassioFabre
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 656
    Registrado : 18/01/2013

    [Resolvido]Macro AutoKeys com condicional

    Mensagem  CassioFabre em Qui 13 Out - 12:38

    Boa tarde,

    Preciso utilizar a macro AutoKeys (ou outra semelhante) para fazer travamento de algumas teclas chaves, como F11. A macro funciona perfeitamente, o meu problema é que preciso que ela dependa do valor de uma função (getGrupoUsuarioAtual()) por que essas teclas só vão ser bloqueadas aos usuários que não são Administradores do sistema. O ponto chave é que essa função só ganha valor após o login do usuário, e a macro é executada ao abrir o sistema. Tentei colocar no campo "Condição" o código getUsuarioAtual()<>"Administradores", mas pelo motivo anterior, não funcionou.

    Agradeço qualquer ajuda ou outra solução.

    Abraço.


    Última edição por CassioFabre em Qui 13 Out - 15:09, editado 1 vez(es)
    avatar
    FabioPaes
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3898
    Registrado : 14/08/2013

    Re: [Resolvido]Macro AutoKeys com condicional

    Mensagem  FabioPaes em Qui 13 Out - 13:57

    Amigo, esse Bloqueio deverá ser feito nos Formularios...

    No formulario, no evento: Visualiza Teclas, coloque = SIM


    Agora na Caixa de texto que quer bloquear o Espaço coloque:

    No evento ao Apertar Tecla, Nao é ao pressionar tecla ta... Coloque:

    Adapte a função a baixo para sua realidade, passando pela Condição If...



    'O evento: "VIsualiza Tecla" do formulario tem que estar = sim
    Select Case KeyCode
           Case vbKeyF11
           KeyCode = 0
           MsgBox "Apertou o Espaço! Apenas para Testes, remover no seu Aplicativo", vbInformation
    End Select




    Lista com o Nome das Teclas: [Você precisa estar registrado e conectado para ver este link.]


    .................................................................................
    _____________________________________________________________________
    Achou a solução para sua dúvida? Não seja Egoísta, Compartilhe com todos!
    A dica do Colega foi útil? Agradeça!

    O importante não saber tudo, mas sim a Onde procurar!
    avatar
    CassioFabre
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 656
    Registrado : 18/01/2013

    AutoKeys

    Mensagem  CassioFabre em Qui 13 Out - 15:06

    Boa tarde,

    Como fazer isso em todos os formulários ficaria absolutamente inviável, uma que se quisesse acrescentar teclas (ou mesmo alterar) teria que fazer formulário por formulário. O jeito que achei pra resolver isso foi criar em um módulo a função:

    Código:
    Public Function bloqTecla() As Boolean
        
        '   TECLAS BLOQUEADAS PARA USUÁRIOS NÃO ADMINSTRADORES
        If getGrupoUsuarioAtual <> "Administradores" Then
            Select Case getTecla
                Case 400122 'alt+f11
                    bloqTecla = True
            End Select
        End If
        
        '   ATALHOS GERAIS
        Select Case getTecla
            Case 27 'esc
                DoCmd.Close
        End Select
    End Function

    E em todos os formulários, setando a Visualização de Teclas para SIM e no evento "Ao Pressionar Tecla" do formulário, coloquei:

    Código:
    setTecla (Val((Shift * 100) & KeyCode))
        
        Call bloqTecla
        
        Select Case bloqTecla
            Case True
                KeyCode = 0
        End Select

    Com isso, basta acrescentar as teclas na função, que se aplicará em todos os formulários.

    Obs.: a função setTecla() atribui o valor da função getTecla() utilizada no módulo.

    Agradecimento ao Avelino, pois o princípio básico pra chegar nessa conclusão, foi retirado do artigo do site dele: [Você precisa estar registrado e conectado para ver este link.]

    Abraço.
    avatar
    FabioPaes
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3898
    Registrado : 14/08/2013

    Re: [Resolvido]Macro AutoKeys com condicional

    Mensagem  FabioPaes em Qui 13 Out - 15:30

    Como fazer isso em todos os formulários ficaria absolutamente inviável...

    Amigo, falei que o bloqueio deveria ser em cada formulário pois cada um é independente e não que deveria colocar o codigo em todos...

    Podendo apenas chamar a função em cada formulário!


    .................................................................................
    _____________________________________________________________________
    Achou a solução para sua dúvida? Não seja Egoísta, Compartilhe com todos!
    A dica do Colega foi útil? Agradeça!

    O importante não saber tudo, mas sim a Onde procurar!
    avatar
    CassioFabre
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 656
    Registrado : 18/01/2013

    Macro AutoKeys com condicional

    Mensagem  CassioFabre em Qui 13 Out - 15:49

    Sim amigo, entendi seu ponto.

    Com a função que escrevi, posso configurar o bloqueio individual de cada form através do módulo, o que me facilita na hora de edição em massa.

    Por exemplo: Se eu quiser que a tecla "F12" não funcione em nenhum formulário, tenho que adicionar o comando if KeyCode = vbKeyF12 then keycode = 0 end if em cada formulário, sendo que da forma que fiz, basta um "Select Case 123 keycode = 0" na função, e todos os formulários ficarão com F12 desabilitados.

    Por outro lado, supondo que eu esteja no formulário "formCadastroCliente" e queira abrir um formulário de lista de cidades "formListaCidades" com a tecla F12, basta que eu implemente, no trecho que falei acima:

    Código:
    select case 123
        if EstáCarregado("formCadastroCliente") then
            docmd.openform "formListaCidades"
        end if
        
        bloqTecla = true

    Abraço.

      Data/hora atual: Dom 20 Maio - 17:49