ACC2000: Jak rozpoznat a zabránit posouvání pomocí záznamů ve formuláři Mouse Wheel

Překlady článku Překlady článku
ID článku: 278379 - Produkty, které se vztahují k tomuto článku.
Upřesnit: Vyžaduje poradce kódování, spolupráce a víceuživatelském dovednosti.

Tento článek se týká databází aplikace Microsoft Access (MDB) a projektů aplikace Microsoft Access (ADP).

Rozbalit všechny záložky | Minimalizovat všechny záložky

Souhrn

Bude neposkytuje metodu pro brání uživatelům v použití kolečka myši k posouvání záznamy na formuláři. Tento článek ukazuje, jak programově uživatelům zabránit v použití kolečka myši k posouvání záznamy na formuláři.

Poznámka: Pokud kód v tomto článku nefunguje podle očekávání, může mít nainstalovat nejnovější Microsoft IntelliPoint nebo softwaru výrobců myši. Stáhnout IntelliPoint software, navštivte následující web společnosti Microsoft:
http://www.microsoft.com/hardware/download/download.aspx?category=MK

Další informace

Společnost Microsoft poskytuje ukázky programování pouze pro ilustraci, bez žádné záruky výslovně uvedené nebo odvozené,. včetně, bez omezení, odvozených záruk vztahujících se k obchodovatelnosti nebo vhodnosti pro určitý účel. Tento článek předpokládá, že uživatel je obeznámen s programovacím jazykem, který je předmětem ukázky, a s nástroji použitými pro vytvoření a ladění skriptu. Pracovníci technické podpory společnosti Microsoft mohou vysvětlit funkce určitého postupu, nemohou však následující příklady rozšířit o další funkce nebo konstrukce podle konkrétních požadavků uživatele. Ve výchozím mohou uživatelé otáčením kolečka myši procházejte řadu záznamů ve formuláři bude. Pokud chcete tomuto zabránit, můžete použít API Win32 k podtřídy formulářů a ignorovat myši kolečko zprávy odeslané do formuláře. Tím dvěma způsoby. První postup je použít k vytvoření ActiveX DLL, že podtříd Microsoft Visual Basic nebo Microsoft Visual C++ formuláře aplikace Microsoft Access a potom odkazovat, že DLL z aplikace Microsoft Access. Druhá metoda je zápis kódu v rámci bude samotný bez použití ActiveX DLL. Doporučuje z důvodu potíží s subclassing windows po načtení editoru Visual Basic Office vysoce společnost Microsoft ActiveX DLL a, které pak odkazovat DLL z aplikace bude používat Microsoft Visual Basic nebo Microsoft Visual C++.

Vytvoření události MouseWheel pomocí ActiveX DLL jazyka

  1. Spuštění aplikace Microsoft Visual Basic 6.0.
  2. Vytvořte nový projekt ActiveX DLL a otevřete ji.
  3. Přidejte následující kód se zobrazí okna modulu třídy:
    Option Compare Text
    Option Explicit
    
    Private frm As Object
    Private intCancel As Integer
    Public Event MouseWheel(Cancel As Integer)
    
    Public Property Set Form(frmIn As Object)
        Set frm = frmIn
    End Property
    
    Public Property Get MouseWheelCancel() As Integer
        MouseWheelCancel = intCancel
    End Property
    
    Public Sub SubClassHookForm()
        lpPrevWndProc = SetWindowLong(frm.hwnd, GWL_WNDPROC, _
                                        AddressOf WindowProc)
          Set CMouse = Me
       End Sub
    
    Public Sub SubClassUnHookForm()
        Call SetWindowLong(frm.hwnd, GWL_WNDPROC, lpPrevWndProc)
    End Sub
    
    Public Sub FireMouseWheel()
        RaiseEvent MouseWheel(intCancel)
    End Sub
    					
  4. Nastavte vlastnosti modulu třídy následujícím způsobem:
       Class Module: CMouseWheel
       -------------------------
       Name: CMouseWheel
       Instancing: 5 - MultiUse
    					
  5. Přidat standardní modul projektu a přidejte následující kód:
    Option Compare Text
    Option Explicit
    
    Public CMouse As CMouseWheel
    Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
        (ByVal hwnd As Long, _
        ByVal nIndex As Long, _
        ByVal dwNewLong As Long) As Long
    
    Public 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 = -4
    Public Const WM_MouseWheel = &H20A
    Public lpPrevWndProc As Long
    Public 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 Select
    End Function
    					
  6. V nabídce Zobrazit klepněte na příkaz Project Explorer zobrazit Prohlížeč projektu.
  7. Vyberte uzel projektu velmi horní Prohlížeč projektu.
  8. V nabídce Zobrazit klepněte na tlačítko Vlastnosti zobrazit okno vlastností pro projekt.
  9. Nastavit vlastnost název projektu MouseWheel.
  10. V nabídce soubor klepněte na Uložení.
  11. Uložit soubory projektu jako basSubClassWindow.bas, CMouseWheel.cls a MouseWheel.vbp respektive.
  12. V nabídce soubor klepněte na tlačítko Vytvořit MouseWheel.dll a klepněte na tlačítko OK, aby DLL.
  13. Ukončete Microsoft Visual Basic.
  14. Spusťte aplikaci Microsoft Access a otevřete ukázkovou databázi Northwind.mdb.
  15. Otevřete formulář Zákazníci v návrhovém zobrazení.
  16. V nabídce Zobrazit klepněte na tlačítko Kód zobrazení v editoru jazyka modul formuláře.
  17. V nabídce Nástroje klepněte na odkazy.
  18. Klepnutím zaškrtněte políčko vedle MouseWheel vyberte odkaz. Pokud jste tento odkaz uveden, klepněte na tlačítko Procházet, klepněte ve složce jej uložili v kroku 12 MouseWheel.DLL a klepněte na tlačítko Otevřít.
  19. Klepněte na tlačítko OK zavřete dialogové okno odkazy.
  20. Modul formuláře přidejte následující kód:
    Option Compare Database
    Option Explicit
    
    Private WithEvents clsMouseWheel As MouseWheel.CMouseWheel
    
    Private Sub Form_Load()
        Set clsMouseWheel = New MouseWheel.CMouseWheel
        Set clsMouseWheel.Form = Me
        clsMouseWheel.SubClassHookForm
    End Sub
    
    Private Sub Form_Close()
       clsMouseWheel.SubClassUnHookForm
       Set clsMouseWheel.Form = Nothing
       Set clsMouseWheel = Nothing
    End Sub
    
    Private Sub clsMouseWheel_MouseWheel(Cancel As Integer)
        MsgBox "You cannot use the mouse wheel to scroll records."
        Cancel = True
    End Sub
    					
  21. V nabídce soubor klepněte na tlačítko Zavřít a návrat do aplikace.
  22. Uložte formulář a poté zavřete.
  23. Otevřete formulář Zákazníci ve formulářovém zobrazení.
  24. Otáčením kolečka myši.
Poznámka: zobrazí zpráva:
Kolečko myši nelze použít k posouvání záznamy.
Všimněte si také, že aktuální záznam nebyl změněn, označující zpráva kolečko myši nebyl zpracován aplikací Microsoft Access.

Vytvoření události MouseWheel kompletně kde bude

Upozornění: Pokud je to možné používejte metody uvedené v části "Creating the MouseWheel událostí podle použití jazyka ActiveX DLL" dříve v tomto článku. Můžete použít metodu popsanou v tomto oddílu pouze v situaci, kde uživatelé aplikace není být načítání editoru Visual Basic v rámci Microsoft Access, jako například v aplikaci Microsoft Access run time. Pokud implementovat toto řešení a uživatelům otevřít Editor jazyka, kód v této části způsobit bude přestat reagovat. Navíc musí ukončení a restartování bude před testování Pokud načtený Editor jazyka alespoň jednou během relace bude tento kód. Společnost Microsoft důrazně doporučuje často uložte práci a zachovat aktuální zálohy databáze, pokud použijete tento přístup.

V této části je znázorněn postup ukazuje, jak použít k vytvoření vlastní události MouseWheel, které můžete do formulářů rozpoznat, kdy uživatel má vrácena kolečko myši s názvem modulu třídy vlastní. Vlastní události zpřístupní Storno argument, který můžete použít zabránit zpráva role kolečko myši právě zachycen bude tím brání posouvání záznamu ve formuláři.

Vytvoření vlastní procedury, postupujte takto:
  1. Upozornění: Pokud postupujte podle kroků v tomto příkladu, změníte ukázkovou databázi Northwind.mdb. Můžete chtít zálohovat soubor Northwind.mdb a postupujte podle těchto kroků na kopii databáze.

  2. Spusťte aplikaci Microsoft Access.
  3. Otevřete ukázkovou databázi Northwind.mdb.
  4. V nabídce Vložit klepněte na modul vytvořte nový modul v editoru jazyka.
  5. Do modulu přidejte následující kód:
    Option Compare Database
    Option Explicit
    
    Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
        (ByVal hwnd As Long, _
        ByVal nIndex As Long, _
        ByVal dwNewLong As Long) As Long
    
    Public 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 = -4
    Public Const WM_MouseWheel = &H20A
    Public lpPrevWndProc As Long
    Public CMouse As CMouseWheel
    
    Public Function WindowProc(ByVal hwnd As Long, _
        ByVal uMsg As Long, _
        ByVal wParam As Long, _
        ByVal lParam As Long) As Long
    
        'Look at the message passed to the window. If it is
        'a mouse wheel message, call the FireMouseWheel procedure
        'in the CMouseWheel class, which in turn raises the MouseWheel
        'event. If the Cancel argument in the form event procedure is
        'set to False, then we process the message normally, otherwise
        'we ignore it.  If the message is something other than the mouse
        'wheel, then process it normally
        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 Select
    End Function
    					
  6. V nabídce soubor klepněte na tlačítko Uložit < název projektu >. Uložte modul jako basSubClassWindow.
  7. V nabídce Vložit klepněte na Modul třídy.
  8. Přidejte následující kód modul třídy:
    Option Compare Database
    Option Explicit
    
    Private frm As Access.Form
    Private intCancel As Integer
    Public Event MouseWheel(Cancel As Integer)
    
    Public Property Set Form(frmIn As Access.Form)
        'Define Property procedure for the class which
        'allows us to set the Form object we are
        'using with it. This property is set from the
        'form class module.
        Set frm = frmIn
    End Property
    
    Public Property Get MouseWheelCancel() As Integer
        'Define Property procedure for the class which
        'allows us to retrieve whether or not the Form
        'event procedure canceled the MouseWheel event.
        'This property is retrieved by the WindowProc
        'function in the standard basSubClassWindow
        'module.
    
        MouseWheelCancel = intCancel
    End Property
    
    Public Sub SubClassHookForm()
        'Called from the form's OnOpen or OnLoad
        'event. This procedure is what "hooks" or
        'subclasses the form window. If you hook the
        'the form window, you must unhook it when completed
        'or Access will crash.
        
        lpPrevWndProc = SetWindowLong(frm.hwnd, GWL_WNDPROC, _
                                        AddressOf WindowProc)
          Set CMouse = Me
       End Sub
    
    Public Sub SubClassUnHookForm()
        'Called from the form's OnClose event.
        'This procedure must be called to unhook the
        'form window if the SubClassHookForm procedure
        'has previously been called. Otherwise, Access will
        'crash.
    
        Call SetWindowLong(frm.hwnd, GWL_WNDPROC, lpPrevWndProc)
    End Sub
    
    Public Sub FireMouseWheel()
    
        'Called from the WindowProc function in the
        'basSubClassWindow module. Used to raise the 
        'MouseWheel event when the WindowProc function
        'intercepts a mouse wheel message.
        RaiseEvent MouseWheel(intCancel)
    End Sub
    					
  9. V nabídce soubor klepněte na tlačítko Uložit < název projektu >. Uložit jako CMouseWheel modulu třídy.
  10. Otevřete formulář Zákazníci v návrhovém zobrazení.
  11. V nabídce Zobrazit klepněte na tlačítko Kód zobrazení modulu třídy formuláře.
  12. Přidejte následující kód modulu třídy formuláře:
    Option Compare Database
    Option Explicit
    
    'Declare a module level variable as the custom class
    'and give us access to the class's events
    Private WithEvents clsMouseWheel As CMouseWheel
    
    Private Sub Form_Load()
        'Create a new instance of the class,
        'and set the class's Form property to
        'the current form  
        Set clsMouseWheel = New CMouseWheel
        Set clsMouseWheel.Form = Me
    
        'Subclass the current form by calling
        'the SubClassHookForm method in the class
        clsMouseWheel.SubClassHookForm
    End Sub
    
    Private Sub Form_Close()
        'Unhook the form by calling the 
        'SubClassUnhook form method in the 
        'class, and then destroy the object
        'variable
      
        clsMouseWheel.SubClassUnHookForm
        Set clsMouseWheel.Form = Nothing
        Set clsMouseWheel = Nothing
    End Sub
    
    Private Sub clsMouseWheel_MouseWheel(Cancel As Integer)
         'This is the event procedure where you can
         'decide what to do when the user rolls the mouse.
         'If setting Cancel = True, we disable the mouse wheel
         'in this form.
    
         MsgBox "You cannot use the mouse wheel to scroll through records."
         Cancel = True
    End Sub
  13. V nabídce soubor klepněte na tlačítko Zavřít a návrat do aplikace.
  14. Uložte formulář a poté zavřete.

    Poznámka: Neotevírejte formuláře ve formulářovém zobrazení v tomto okamžiku. Pokud tak učiníte, budou přestane odpovídat protože zaveden Editor jazyka.
  15. Ukončení aplikace Microsoft Access.
  16. Restartujte aplikace a otevřete ukázkovou databázi Northwind.mdb.
  17. Otevřete formulář Zákazníci ve formulářovém zobrazení.
  18. Otáčením kolečka myši.
Poznámka: zobrazí zpráva:
Kolečko myši nelze použít k procházení záznamů.
Všimněte si také, že aktuální záznam nebyl změněn, označující zpráva kolečko myši nebyl zpracován aplikací Microsoft Access.

Vlastnosti

ID článku: 278379 - Poslední aktualizace: 16. září 2005 - Revize: 3.2
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft Access 2000 Standard Edition
Klíčová slova: 
kbmt kbhowto KB278379 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:278379

Dejte nám zpětnou vazbu

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com