Dicas do OsmarJr

MouseWheelOnOff


Nova Versão 2.2 – 15 de Março de 2005

Esta é a última versão que contém um parâmetro opcional para desativar a roda do mouse para Subformulários   (MouseWheelHookA2K.zip). Por favor, note que a convenção de chamada foi alterada para a função MouseOff. Veja o código no formulário de exemplo.  

Nota: O arquivo MouseWheelHook.zip, para o Access 97, abaixo NÃO contém a mais nova versão da DLL MouseHook. Não estou mais atualizando os códigos das antigas versões para o A97. Você pode usar, com certeza, a DLL MouseHook no Access 97.

 

MouseWheelHook é um MDB que demonstra como usar um MouseHook para desativar a roda do mouse. Acabou o inferno da DLL MouseWheel. Não é mais necessário registrar uma DLL. A DLL MouseHook é uma DLL padrão Windows. Não tente registrá-la ou referenciá-la dentro do Access. Apenas copie a MouseHook.DLL para sua pasta Windows/System ou para a mesma pasta onde está seu aplicativo MDB. Uma instância trata todos os formulários e subformulários: a função precisa ser chamada apenas uma vez a partir de um único formulário.

Aqui está um código simples que pode ser colocado em qualquer controle Botão de Comando. Este código também pode ser colocado no evento Ao carregar de um formulário. Lembre-se: estas funções precisam ser chamadas APENAS UMA VEZ. A MouseHook vai cuidar de todas as mensagens da roda do mouse para todos os formulários que forem abertos durante a seção. Lembre-se de reativar a roda do mouse antes de sai do aplicativo!

Private Sub Command14_Click()
' Desativa a roda do mouse
Dim blRet As Boolean

     blRet = MouseWheelOFF

End Sub

Ou, se estiver executando diversas instâncias do Access, você pode passar um parâmetro opcional solicitando um GlobalHook. O padrão é FALSO. Por favor, veja a documentação da Versão abaixo.

    blRet = MouseWheelOff(True)

Private Sub Command16_Click()
'Ativa a roda do mouse
Dim blRet As Boolean

    blRet = MouseWheelON
End Sub

 

Dicas/Sugestões de usuários, clique aqui!

 

Versão do Access 97

A97MouseWheelHook.zip é um MDB que demonstra como usar um MouseHook para desativar a roda do mouse.

 

Versão 2.2

Sim, os números de versão do MDB exemplo finalmente foram atualizados para refletir a realidade. O importante é que a DLL tem uma data de criação igual a Março de 2005. Note que a convenção de chamada da função MouseOff foi alterada para acomodar um parâmetro opcional para permitir que a roda do mouse seja completamente desativada para Subformulários.

 

Versão 2.7

Note o parâmetro Boolean Opcional GlobalHook.

Diversos desenvolvedores solicitaram que o MouseHook fosse capaz de trabalhar com diversas instâncias do Access. Para atender a esta solicitação, modifiquei a função para permitir que o chamador trate a roda do mouse em um aplicativo específico ou de forma global (todos os aplicativos).

Use o parâmetro GlobalHook apenas se estiver usando diversas instâncias do Access simultaneamente.

blRet = MouseWheelOFF(True)

Note que esta é uma atualização da versão de 09 de março de 2004. Os mouses Logitech agora são suportados. A única diferença entre um mouse Microsoft e um mouse Logitech é que você só consegue rolar uma caixa de combinação aberta com um mouse Microsoft. Veja o código dos formulários de exemplo para ver como desativar ou ativar a roda do mouse. É necessário importar para o seu MDB o módulo de código padrão "modMouseHook" encontrado no MDB exemplo, incluído no arquivo zip. Correção de problemas em Subformulários com barras de rolagem. Correção de problemas com Subformulários sem barras de rolagem visíveis. Adicionado suporte para especificar uma variável Global versus hook específico para permitir múltiplas instâncias do Access.

 

Versão 2.6

Correção de erros. A correção da barra de rolagem de subformulários da versão 2.5 criou novos problemas para subformulários com barras de rolagem visíveis.

 

Versão 2.5

Correção de erros. Não sei por que, mas em meus formulários de exemplo, nunca havia criado um subformulário sem barras de rolagem. Keith Broaddrick   foi simpático em indicar que em, subformulários sem barras de rolagem, a roda do mouse ainda permitia a rolagem pelo recordset. Estou de dedos cruzados para que esta seja a última correção por um bom tempo <sorriso>.

 

Versão 2.4

Erroneamente havia comentado código para suportar formulários em modo Pop-Up na versão 2.3. Acrescentado suporte para formulários pop-up neste release.

 

Versão 2.3

O hook agora funciona com todas as versões de Windows posteriores ao Win95. (Acrescentarei suporte para Win95 no próximo release).

Verificado o funcionamento do hook em formulários ADP Access.

O problema a seguir não tinha nada a ver com meu código. Através de testes verifiquei que é um problema do Access 97 sob Windows 98 usando um driver Intellimouse. É comprovado com qualquer MDB esteja ou não usando meu hook. O problema pode resultar em um loop sem fim sob um conjunto de circunstâncias muito específicas (quando a roda do mouse é rolada tão rápido quanto possível em uma caixa de texto). Só consegui repetir este problema no sistema mencionado acima.

 

Versão 2.2

Alterado de MouseHook para MessageHook para permitir suporte a mouses logitech.

 

Versão 2.1

Corrigidos os handles para controles Guia (Tab) e Grupo de Opção. Removido um erro que permitia, às vezes, que uma caixa de texto multilinhas passasse mensagens do MouseWheel para o formulário. Permite que o usuário role as linhas em um controle caixa de combinação. Permite que a roda do mouse funcione em subformulários. Não altera o funcionamento de formulários não Access. A lógica da DLL foi completamente reescrita. Funciona com todos os controles de formulário.

 

** Lembre-se de remover qualquer instância da MouseHook.DLL do seu sistema. Ao chamar o código a partir do seu formulário, será feita uma busca na pasta Windows/System pela MouseHook.DLL. Se não encontrar, procura pela DLL na pasta onde reside o MDB. Isto quer dizer que, se você tiver uma cópia da DLL na sua pasta de aplicativo e na pasta Windows/System e substituir apenas a da pasta do aplicativo, a versão ANTIGA será usada. **

 

Dicas de usuários do MouseWheel Hook

Problemas com ADP

Robert Pascale escreve: Digno de nota é que em projetos ADP Access 2000 (não em MDBs) não podemos usar as funções "currentdb".

Substitui a linha:

hLib = LoadLibrary(CurrentDBDir() & "MouseHook.dll")

por:

hLib = loadLibrary(CurrentProject.Path & "\MouseHook.dll")

talvez seja útil atualizar sua página.

Grato,

Rob

 

Abaixo está uma DLL ActiveX antiga com método baseado em subclasse. Use a solução MouseWheelHook acima!

NOVA VERSÃO – 15 de outubro de 2002. Desregistre e apague todas as versões anteriores da MouseWheel.DLL do seu sistema antes de registrar esta nova versão. Esta versão finalmente suporta subformulários! Grato a Terry Kreft por fornecer a correção!

 

MouseWheelOnOff.zip é um banco de dados contendo código exemplo para permitir que o usuário ative ou desative a roda do mouse programaticamente. Não há referências no MDB ao arquivo MouseWheel.DLL. Se tentar abrir o formulário de exemplo, vai receber uma mensagem de erro. Siga as instruções abaixo ou aquelas contidas no formulário de exemplo para fazer o registro inicial da DLL.

 

Adaptado do artigo Q278379 da MS KB.

Você deve fazer uma referência ao arquivo MouseWheel.DLL

O arquivo está incluído nesta pasta.

Após SALVÁ-LA em uma pasta a sua escolha, você deve seguir os passo para dizer ao Access onde encontrar o arquivo.

  • Abra qualquer formulário em modo Design, vá ao menu Exibir e selecione Código do menu. Alternativamente, você pode abrir qualquer módulo de Classe ou Código.
  • Selecione o menu Ferramentas, Referências.
  • Selecione o botão localizar e vá até a pasta onde salvou o arquivo MouseWheel.DLL. Por padrão, o assistente mostra apenas os arquivos do tipo Bibliotecas (*.olb, *.tlb). Para que o arquivo MouseWheel.DLL apareça, é necessário clicar na caixa de combinação "tipos de arquivos" e selecionar a entrada para Arquivos executáveis (*.exe, *.dll).

 


Contato | Copyright©Osmar José Correia Júnior | 24-Oct-2005 19:06