| | | | 
|
Auf der AP-Access-Tools Vol.1 finden Sie weitere 320
Tipps & Tricks sowie 250 Access-Beispiel/Anwendungen mit offenen Quellcode!
Die Access-Tools-CD mit über 400 MByte Inhalt - für Access- und VB-Entwickler
256 Access-Beispiele mit offenem Code
45 Add-Ins und ActiveX-Komponenten (Freeware)
16 VB-Projekt inkl. Source
321 Tipps & Tricks für Access und VB
Plus 11 Entwicklerversionen (9 davon mit Source!)
Plus 3 Vollversionen und
Plus riesiger Datenpool
Holen Sie sich jetzt Ihre AP-Access-Tools-CD zum Superpreis von nur EUR 24,95! | | | | |
|
Der Code dieses Beispiels schaltet das das Blättern mit dem Mausrad in
Formularen ab. Immer wieder kommt es zu Eingabefehlern, wenn der Anwender innerhalb
eines Formulars am Mausrad dreht. Dieser Tipp schafft Abhilfe!
Hinweis
Dieser Tipp ist nur für Microsoft Access 97. Den Tipp für Access 2000
und Access XP finden Sie ebenfalls in unserem Tippverzeichnis.
1.) Kopieren Sie den folgenden VBA-Code in ein neues Accessmodul:
Option Compare Database
Option Explicit
' == IM MODUL ================
Public lpPrevWndProc As Long
Public Const GWL_WNDPROC = (-4)
' Window-Messages
Public Const WM_MOUSEWHEEL = &H20A
' == API's =============================
Public Declare Function SetWindowLong Lib "user32" _
Alias "SetWindowLongA" _
(ByVal hWnd&, _
ByVal nIndex&, _
ByVal dwNewLong&) As Long
Public Declare Function CallWindowProc Lib "user32" _
Alias "CallWindowProcA" _
(ByVal lpPrevWndFunc&, _
ByVal hWnd&, _
ByVal Msg&, _
ByVal wParam&, _
ByVal lParam&) As Long
' == FUNCTIONS ========================
Public Function SubWindowProc(ByVal hWnd&, ByVal uMsg&, _
ByVal wP&, ByVal lP&) As Long
' Fensterfunktion des Formulars / Controls
On Error Resume Next
' Messages hier bearbeiten
If uMsg = WM_MOUSEWHEEL Then
' nichts zu tun hier
SubWindowProc = 1
Exit Function
End If
'return to the message original proc
SubWindowProc = CallWindowProc(lpPrevWndProc, hWnd, uMsg, wP, lP)
End Function
Public Sub HookMe(hw&)
' Subclass by the given handle
' Aufruf zb aus Form_Load() mit
' Call HookMe(Me.hwnd)
lpPrevWndProc = SetWindowLong(hw&, GWL_WNDPROC, _
AddrOf("SubWindowProc"))
End Sub
Public Sub UnHookMe(hw&)
' Unhook the given handle
' Aufruf zb aus Form_UnLoad() mit
' Call UnHookMe(Me.hwnd)
If lpPrevWndProc& <> 0 Then: Call SetWindowLong(hw&, _
GWL_WNDPROC, lpPrevWndProc&)
lpPrevWndProc = 0
End Sub
Speicher dieses Modul unter
dem Namen bas_MOUSEWHEEL ab.
2.) Microsoft Access 97 kennt den Befehl AddressOf
nicht und es wird ein zusätzliches Modul benötigt. Kopieren Sie den
Code in ein eigenes Modul und speichern Sie es unter dem Namen bas_AddrOf
ab.
Option Compare Database
Option Explicit
Private Declare Function GetCurrentVbaProject Lib "vba332.dll" _
Alias "EbGetExecutingProj" (hProject&) As Long
Private Declare Function GetFuncID Lib "vba332.dll" _
Alias "TipGetFunctionId" _
(ByVal hProject&, _
ByVal strFunctionName$, _
ByRef strFunctionId$) As Long
Private Declare Function GetAddr Lib "vba332.dll" _
Alias "TipGetLpfnOfFunctionId" _
(ByVal hProject&, _
ByVal strFunctionId$, _
ByRef lpfn&) As Long
' ==< FUNCTIONS > =========================================
Public Function AddrOf&(strFuncName$)
' gibt den Funktionszeiger einer public VBA Funktion zurück
' Parameter: strFuncName ... Funktionsname
' Return: >0 Adresse, 0 Fehler
' Aufruf zb lFuncPtr& = AddrOf("MyPublicFunc")
Dim hProject&, lResult&, lpfn&
Dim strID$, strFuncNameUnicode$
Const NO_ERROR = 0
AddrOf = 0
' Konvert strFuncName Unicode
strFuncNameUnicode = StrConv(strFuncName, vbUnicode)
' Handle des VBA - Moduls holen
Call GetCurrentVbaProject(hProject)
If hProject <> 0 Then
' FunktionsID der VBA-Funktion ermitteln
lResult = GetFuncID(hProject, strFuncNameUnicode, strID)
If lResult = NO_ERROR Then
' Adresse des FunktionsID holen
lResult = GetAddr(hProject, strID, lpfn)
If lResult = NO_ERROR Then: AddrOf = lpfn
End If
End If
End Function
3.) Folgende Anweisungen
müssen in jedes Formular, ein denen das Mausrad deaktiviert werden sollen.
Ereignis: Beim Laden
Private Sub Form_Load()
'Subclassing auf Formular anwenden
Call HookMe(Me.hWnd)
End Sub
Ereignis: Beim Entladen
Private Sub Form_Unload(Cancel As Integer)
'Subclassing auf Formular anwenden
Call UnHookMe(Me.hWnd)
End Sub
Copyright 2000-2003 Microsys
Kramer– Alle Rechte vorbehalten - Der Download von Tipps und
Programmen von den Seiten www.access-paradies.de erfolgt auf eigene
Gefahr. Microsys Kramer haftet nicht für Schäden, die
aus der Installation oder der Nutzung von Tipps oder Software aus
dem Download-Bereich erfolgen. Trotz aktueller Virenprüfung
ist eine Haftung für Schäden und Beeinträchtigungen
durch Computerviren ausgeschlossen. Schadenersatzansprüche,
aus welchem Rechtsgrund auch immer, sind ausgeschlossen, wenn Microsys
Kramer nicht Vorsatz oder grobe Fahrlässigkeit zu vertreten
hat. Dies gilt auch für Ansprüche auf Ersatz von Folgeschäden
wie Datenverlust. |