Ich implementiere eine Drag-and-Drop-Simulation in einer kontinuierlichen Form.Kontrolle ms Zugriff scrollbar in kontinuierlicher Form
im Grunde die Art, wie es funktioniert, gibt es eine Liste von Personen in der Seite und der Benutzer kann eine Person aus der Liste in ein Feld ziehen (das ist eine Sitzliste, mit Feldern wie Seat1, Seat2, Seat3 .. ., und jede Sitzreihe ist ein neuer Rekord).
Für die grundlegende Drag & Drop-Funktionalität verwende ich die Anweisungen von diesem Link Drag And Drop, und es funktioniert gut.
jetzt hier ist mein Problem, um zu wissen, auf welchem Datensatz der Benutzer die Maus bewegt, muss ich die Position der Maus durch den Detailabschnitt zu berechnen, so während das Formular nicht gescrollt ist funktioniert es gut , aber wenn das Formular gescrollt wird, muss ich zuerst wissen, wie stark das Formular ist, und dies kann nur durch eine Windows-API erreicht werden.
so fand ich, dass www.lebans.com/conformscurcontrol.htm genau den Code ich brauche, aber das funktionierte nur in älteren Versionen von MS-Zugriff, der Code, der in der neueren Version einbricht, ist, dass er überprüft von einem Fenster Klassenname "scrollbar" und Aufruf der GetScrollInfo API, aber in neueren Versionen gibt es keine Klasse namens "scrollbar", aber es gibt eine andere Klasse namens NUIScrollbar See Here, aber auch wenn ich es auf diesen Namen ändere t erhalten Sie eine gültige Scrollbar-Klasse (LPSCROLLINFO) zurück. Hier
ist der Code von Stephen Lebans
Public Function fGetScrollBarPos(frm As Form) As Long
' Return ScrollBar Thumb position
' for the Vertical Scrollbar attached to the
' Form passed to this Function.
Dim hWndSB As Long
Dim lngRet As Long
Dim sinfo As SCROLLINFO
' Init SCROLLINFO structure
sinfo.fMask = SIF_ALL
sinfo.cbSize = Len(sinfo)
sinfo.nPos = 0
sinfo.nTrackPos = 0
' Call function to get handle to
' ScrollBar control if it is visible
hWndSB = fIsScrollBar(frm)
If hWndSB = -1 Then
fGetScrollBarPos = False
Exit Function
End If
' Get the window's ScrollBar position
lngRet = apiGetScrollInfo(hWndSB, SB_CTL, sinfo)
'Debug.Print "nPos:" & sInfo.nPos & " nPage:" & sInfo.nPage & " nMax:" & sInfo.nMax
fGetScrollBarPos = sinfo.nPos + 1
End Function
Private Function fIsScrollBar(frm As Form) As Long
' Get ScrollBar's hWnd
Dim hWnd_VSB As Long
Dim hWnd As Long
hWnd = frm.hWnd
' Let's get first Child Window of the FORM
hWnd_VSB = apiGetWindow(hWnd, GW_CHILD)
' Let's walk through every sibling window of the Form
Do
' Thanks to Terry Kreft for explaining
' why the apiGetParent acll is not required.
' Terry is in a Class by himself! :-)
'If apiGetParent(hWnd_VSB) <> hWnd Then Exit Do
dies der alte Frieden
If fGetClassName(hWnd_VSB) = "scrollBar" Then
If apiGetWindowLong(hWnd_VSB, GWL_STYLE) And SBS_VERT Then
fIsScrollBar = hWnd_VSB
Exit Function
End If
End If
dies, wie ich es
If fGetClassName(hWnd_VSB) = "NUIScrollbar" Then
If apiGetWindowLong(hWnd_VSB, GWL_STYLE) And 1107296256 Then
fIsScrollBar = hWnd_VSB
Exit Function
End If
End If
weiterhin die Funktion zu ersetzen versucht
' Let's get the NEXT SIBLING Window
hWnd_VSB = apiGetWindow(hWnd_VSB, GW_HWNDNEXT)
' Let's Start the process from the Top again
' Really just an error check
Loop While hWnd_VSB <> 0
' SORRY - NO Vertical ScrollBar control
' is currently visible for this Form
fIsScrollBar = -1
End Function
' From Dev Ashish's Site
' The Access Web
' http://www.mvps.org/access/
'******* Code Start *********
Private Function fGetClassName(hWnd As Long)
Dim strBuffer As String
Dim lngLen As Long
Const MAX_LEN = 255
strBuffer = Space$(MAX_LEN)
lngLen = apiGetClassName(hWnd, strBuffer, MAX_LEN)
If lngLen > 0 Then fGetClassName = Left$(strBuffer, lngLen)
End Function
'******* Code End *********
Hoffe ich bin klar genug, jede Hilfe geschätzt.
Was ist Ihre aktuelle Version von MS-Access? Ist es auf einem 64-Bit-System? Es könnte API-Änderungen sein. Ich gehe davon aus, dass Sie auf 64-Bit-Windows laufen. Ein Artikel befasst sich damit unter http://www.catch22.net/tuts/64bit-scrollbars – dbmitch
Sie könnten die Verwendung von ListView-Steuerelementen mit integrierter Drag & Drop-Unterstützung in Betracht ziehen. – Andre