كنت أعمل على أداة البيانات MSFlexGrid وأردت أفادتكم لمن يسأل عن تحريك الشريط الجانبي للأداة بسكرول الماوس أي لاظهار البيانات للأسفل وللأعلى بدولاب الماوس ،وتم برمجة الطريقة بأستعمال دوال API على الشكل التالي:
' في المودل:
Public oldWndProc As Long Public 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 Dim Cont As Integer Public Function MyWndProc(ByVal Hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long If wMsg = 522 Then With Form1.MSFlexGrid1 Cont = .TopRow Select Case wParam Case 7864320 Cont = Cont - 1 Case -7864320 Cont = Cont + 1 End Select If Cont = 0 Then Cont = 1 .TopRow = Cont End With End If MyWndProc = CallWindowProc(oldWndProc, Hwnd, wMsg, wParam, lParam) End Function
وفي الفورم :
Private Sub MSFlexGrid1_GotFocus() 'أبدأ القنص oldWndProc = SetWindowLong(Me.Hwnd, GWL_WNDPROC, AddressOf MyWndProc) End Sub Private Sub MSFlexGrid1_LostFocus() 'إنتهاء القنص oldWndProc = SetWindowLong(Me.Hwnd, GWL_WNDPROC, oldWndProc) End Sub
تم أستدعاء الدالة في حدث نقل التركيز لأمرين : للتخفيف من موارد النظام ولتعمل فقط على هذه الأداة
مرجع الدالة http://www.geocities.com/SiliconValley/Lab/1632/atch12.html
والله الموفق ..
مرفق المثال :
