PDA

Vollständige Version anzeigen : Mausrad wechselt den Datensatz


Christoph Eick
02.10.2001, 23:22
Bei manchen Mäusen mit Rd kann der Anwender durch drehen des Rades den Datensatz wechseln.
Dieses möchte ich eigentlich verhindern, zumindest nach dem letzten Datensatz (hier wird ein neuer Datensatz hinzugefügt).
Statt dessen möchte ich im letzten Datensatz und dem erneuten drehen am Rad eine Meldung anzeigenlassen. Ähnlich wie dies beim Klicken aus einer Schaltfläche möglich ist.

If Me.CurrentRecord = Me.RecordsetClone.RecordCount Then
MsgBox "Letzter Datensatz"
Me.AllowAdditions = False
End If
Leider funktioniert diese Prozedur nicht uneingeschränkt im Currentereignis.

Wie kann ich den Mausbefehl für das Rad abfangen??

Gruß Christoph Eick

Trash
03.10.2001, 07:10
Hi Christoph!

Ja ja, ich kenne dieses Problem und fand eine gute Lösung dafür. Darf ich fragen welches Accsess Du hast?

Trash
03.10.2001, 07:40
War für Dich schon ganz fleißig und hab Dir eine Demodatenbank auf folgende Adresse hinterlassen. Viel Spass damit!
http://www.dsz.at/mrp.mdb

Christoph Eick
03.10.2001, 09:42
Hallo Trash,
Access 97.
Ich habe mir Deine DemoDatenbank heruntergeladen und schaue sie mir mal an.
Ich meld' mich dann.

Danke Christoph Eick

Christoph Eick
03.10.2001, 09:48
Hallo Trash,
Ich erhalte eine Fehlermeldung: " Nicht erkennbares Datenbankformat"
Vermutlich hast Du eine andere Access-Version.
Ich arbeite mit Access `97.

Besteht die Möglichkeit mir dies in Access 97
zu erstellen??
Sonst schreibe doch einfach den Code auf.

Bis dann
Christoph Eick

Trash
03.10.2001, 10:08
Hi Christoph!

Hab Dir jetzt eine konvertierte Version auf meinen Server gestellt. Hoffe, Du kannst damit was anfangen. Ansonsten werd ich dir mal die einzelnen CODES kopieren.
Also meld Dich!

Gleicher LINK!

Trash
03.10.2001, 10:22
Erstes MODUL
Name: bas_AddrOf

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

Public Function AddrOf&(strFuncName$)
Dim hProject&, lResult&, lpfn&
Dim strID$, strFuncNameUnicode$
Const NO_ERROR = 0
AddrOf = 0
strFuncNameUnicode = StrConv(strFuncName, vbUnicode)
Call GetCurrentVbaProject(hProject)
If hProject <> 0 Then
lResult = GetFuncID(hProject, strFuncNameUnicode, strID)
If lResult = NO_ERROR Then
lResult = GetAddr(hProject, strID, lpfn)
If lResult = NO_ERROR Then: AddrOf = lpfn
End If
End If
End Function


Zweites MODUL
Name: bas_MOUSEWHEEL

Option Compare Database
Option Explicit
Public lpPrevWndProc As Long
Public Const GWL_WNDPROC = (-4)
Public Const WM_MOUSEWHEEL = &H20A
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
Public Function SubWindowProc(ByVal hWnd&, ByVal uMsg&, ByVal wP&, ByVal lP&) As Long
On Error Resume Next

If uMsg = WM_MOUSEWHEEL Then
SubWindowProc = 1
Exit Function
End If
SubWindowProc = CallWindowProc(lpPrevWndProc, hWnd, uMsg, wP, lP)
End Function

Public Sub HookMe(hw&)
' in Access 97: mangels AddressOf Operator das work-around AddrOf verwenden!
'lpPrevWndProc = SetWindowLong(hw&, GWL_WNDPROC, AddrOf("SubWindowProc"))
' in Access 2K
lpPrevWndProc = SetWindowLong(hw&, GWL_WNDPROC, AddressOf SubWindowProc)
'Hier war in dem Orginalscript von Claudia 2x ein " - Anführungszeichen zu viel bei SubWindowProc
End Sub

Public Sub UnHookMe(hw&)
If lpPrevWndProc& <> 0 Then: Call SetWindowLong(hw&, GWL_WNDPROC, lpPrevWndProc&)
lpPrevWndProc = 0
End Sub

Danach beim jeweiligen Formular einsetzen!
Beim öffnen der Ereignisprozedur


Private Sub Form_Open(Cancel As Integer)
Call HookMe(Me.hWnd)
End Sub


Und beim Entladen

Private Sub Form_Unload(Cancel As Integer)
Call UnHookMe(Me.hWnd)
End Sub


Jo! Das wars. Du erreichst damit die vollkommene Sperre der Scrollmausfunktion.

Viel Spaß damit!