ACC97: Como impedir o uso da roda do mouse para rolar por registros em um formulário

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 308636
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Avançadas: Requer especialista de codificação, interoperabilidade e habilidades de multiusuário.

Sumário
Este artigo descreve como criar uma DLL ActiveX para impedir que usuários usando a roda do mouse para percorrer registros em um formulário.
Mais Informações
Microsoft fornece exemplos de programação apenas para ilustração, sem garantia expressa ou implícita. Isso inclui, mas não está limitado a, garantias implícitas de comercialização ou adequação para uma finalidade específica. Este artigo presume que você está familiarizados com a linguagem de programação que está sendo demonstrada e com as ferramentas que são usadas para criar e depurar procedimentos. Engenheiros de suporte podem ajudar a explicar a funcionalidade de um determinado procedimento, mas eles não modificarão esses exemplos para fornecer funcionalidades adicionais ou construir procedimentos para atender às suas necessidades. Por padrão, os usuários podem a roda do mouse para rolar por uma série de registros em um formulário do Access. A Microsoft não fornece uma maneira de impedir essa ação, mas você pode impedir que essa ação usando a API do Win32 a subclasse os formulários e para instruir o Access ignorar a entrada de mecanismo cíclico do mouse para o formulário.

Embora seja possível escrever todo o código necessário dentro do Access próprio sem usar uma DLL ActiveX, a Microsoft recomenda que você usar o Microsoft Visual Basic ou Microsoft Visual C++ para criar uma DLL ActiveX que subclasses acessar formulários e, em seguida, criar uma referência para essa DLL.

Criar uma DLL ActiveX no Visual Basic

  1. Inicie o Visual Basic 6.0.
  2. Criar um novo projeto ActiveX DLL e, em seguida, abra o projeto.
  3. Adicione o seguinte código à janela de módulo classe aparece:
    Option Compare TextOption ExplicitPrivate frm As ObjectPrivate intCancel As IntegerPublic Event MouseWheel(Cancel As Integer)Public Property Set Form(frmIn As Object)    Set frm = frmInEnd PropertyPublic Property Get MouseWheelCancel() As Integer    MouseWheelCancel = intCancelEnd PropertyPublic Sub SubClassHookForm()    lpPrevWndProc = SetWindowLong(frm.hwnd, GWL_WNDPROC, _                                    AddressOf WindowProc)      Set CMouse = Me   End SubPublic Sub SubClassUnHookForm()    Call SetWindowLong(frm.hwnd, GWL_WNDPROC, lpPrevWndProc)End SubPublic Sub FireMouseWheel()    RaiseEvent MouseWheel(intCancel)End Sub					
  4. Defina as propriedades do módulo de classe como segue:
       Class Module: CMouseWheel   -------------------------   Name: CMouseWheel   Instancing: 5 - MultiUse					
  5. Adicione um módulo padrão para o projeto e, em seguida, adicione o seguinte código:
    Option Compare TextOption ExplicitPublic CMouse As CMouseWheelDeclare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _    (ByVal hwnd As Long, _    ByVal nIndex As Long, _    ByVal dwNewLong As Long) As LongPublic Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" _    (ByVal lpPrevWndFunc As Long, _     ByVal hwnd As Long, _     ByVal msg As Long, _     ByVal wParam As Long, _     ByVal lParam As Long) As Long     Public Const GWL_WNDPROC = -4Public Const WM_MouseWheel = &H20APublic lpPrevWndProc As LongPublic Function WindowProc(ByVal hwnd As Long, _    ByVal uMsg As Long, _    ByVal wParam As Long, _    ByVal lParam As Long) As Long    Select Case uMsg        Case WM_MouseWheel            CMouse.FireMouseWheel            If CMouse.MouseWheelCancel = False Then                WindowProc = CallWindowProc(lpPrevWndProc, hwnd, uMsg, wParam, lParam)            End If                    Case Else           WindowProc = CallWindowProc(lpPrevWndProc, hwnd, uMsg, wParam, lParam)    End SelectEnd Function					
  6. No menu Exibir , clique em Explorador de projeto para exibir o Project Explorer.
  7. Clique no nó projeto na parte superior do Project Explorer.
  8. No menu Exibir , clique em Propriedades para exibir a folha de propriedades para o projeto.
  9. Defina propriedade de nome do projeto como MouseWheel .
  10. No menu arquivo , clique em Save Project .
  11. Salve os arquivos de projeto como basSubClassWindow.bas CMouseWheel.cls e MouseWheel.vbp respectivamente.
  12. No menu arquivo , clique em Criar MouseWheel.dll e, em seguida, clique em OK para fazer a DLL.
  13. Feche o Microsoft Visual Basic.

Criar uma referência para a DLL ActiveX

  1. Inicie o Microsoft Access e abra o banco de dados de exemplo Northwind.mdb.
  2. Abra o formulário Customers no modo de design.
  3. No menu Exibir , clique em código para exibir o módulo do formulário no Editor do Visual Basic.
  4. No menu Ferramentas , clique em referências .
  5. Para selecionar a referência, clique para selecionar a caixa de seleção ao lado de MouseWheel . Se essa referência não estiver listada, clique em Procurar , clique em MouseWheel.dll na pasta onde você salvou (na etapa 12 do procedimento anterior) e, em seguida, clique em Abrir .
  6. Clique em OK para fechar a caixa de diálogo referências .
  7. Adicione o seguinte código para o módulo do formulário:
    Option Compare DatabaseOption ExplicitPrivate WithEvents clsMouseWheel As MouseWheel.CMouseWheelPrivate Sub Form_Load()    Set clsMouseWheel = New MouseWheel.CMouseWheel    Set clsMouseWheel.Form = Me    clsMouseWheel.SubClassHookFormEnd SubPrivate Sub Form_Close()   clsMouseWheel.SubClassUnHookForm   Set clsMouseWheel.Form = Nothing   Set clsMouseWheel = NothingEnd SubPrivate Sub clsMouseWheel_MouseWheel(Cancel As Integer)    MsgBox "You cannot use the mouse wheel to scroll records."    Cancel = TrueEnd Sub					
  8. No menu arquivo , clique em Fechar e voltar para o Microsoft Access .
  9. Salve e feche o formulário clientes.
  10. Para exibir os resultados, abra o formulário Customers no modo de formulário e tente rolar usando a roda do mouse. Observe que você recebe a seguinte mensagem:
    Não é possível utilizar a roda do mouse para percorrer registros.
    Observe também que o registro atual não mudou, que indica que a acesso não processou sem a interrupção da roda do mouse.
inf

Propriedades

ID do Artigo: 308636 - Última Revisão: 12/06/2015 05:59:00 - Revisão: 4.1

Microsoft Access 97 Standard Edition

  • kbnosurvey kbarchive kbmt kbhowto kbprogramming KB308636 KbMtpt
Comentários
ERROR: at System.Diagnostics.Process.Kill() at Microsoft.Support.SEOInfrastructureService.PhantomJS.PhantomJSRunner.WaitForExit(Process process, Int32 waitTime, StringBuilder dataBuilder, Boolean isTotalProcessTimeout)