|
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!
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)
Dicas/Sugestões de usuários, clique aqui!
Versão do Access 97A97MouseWheelHook.zip é um MDB que demonstra como usar um MouseHook para desativar a roda do mouse.
Versão 2.2Sim, 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.7Note 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.6Correçã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.5Correçã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.4Erroneamente 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.3O 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.2Alterado de MouseHook para MessageHook para permitir suporte a mouses logitech.
Versão 2.1Corrigidos 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 HookProblemas 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.
|