Código:
' para quem quer utilizar o scroll no grid ou em mais de um grid ai vai a dica
' ***************************************
' em qualquer modulo coloque
' ***************************************
Public Const GWL_WNDPROC = (-4)
Public lProcJanOrig1 As Long '**************** referente ao formulario n° 1
Public lProcJanOrig2 As Long '**************** referente ao formulario n° 2
' para um 3° form crie outra linha troque o 2 por 3,4,5
Public Declare Function apiGrvIdentJan Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function apiLerIdentJan Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Public mygrid As Object
Public Sub ScrollUp()
If mygrid.TopRow > 1 And mygrid.Rows > 31 Then
mygrid.TopRow = mygrid.TopRow
mygrid.TopRow = mygrid.TopRow - 1
mygrid.TopRow = mygrid.TopRow
End If
End Sub
Public Sub ScrollDown()
If mygrid.TopRow < mygrid.Rows - 1 And mygrid.Rows > 31 Then
mygrid.TopRow = mygrid.TopRow
mygrid.TopRow = mygrid.TopRow + 1
mygrid.TopRow = mygrid.TopRow
End If
End Sub
' ***************************************
' este é o modulo para o formulario n° 1
' ***************************************
' preste atenção nas variaveis ( lProcJan1 ) ( lProcJanOrig1 )
' no outros modulos troque o numero 1 por 2,3,4,5
Option Explicit
Private Const WM_MOUSEWHEEL = &H20A
Private Declare Function apiExecProcJan 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 Function lProcJan1(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If (wMsg = WM_MOUSEWHEEL) Then
If (wParam > 0) Then
Call ScrollUp
Else
Call ScrollDown
End If
End If
lProcJan1 = apiExecProcJan(lProcJanOrig1, hwnd, wMsg, wParam, lParam)
End Function
' ***************************************
' no form_load de formulario n°1
' ***************************************
' preste atenção nas variaveis ( lProcJan1 ) ( lProcJanOrig1 )
' no outros forms troque o numero 1 por 2,3,4,5
' aco que voce pode criar quantos forms quiser mas para cada form tem que ter um
' modulo como explicado acima
Dim lRet1 As Long
lProcJanOrig1 = apiLerIdentJan(Me.hwnd, GWL_WNDPROC)
lRet1 = apiGrvIdentJan(Me.hwnd, GWL_WNDPROC, AddressOf lProcJan1)
' se voce tiver 2,3,4 grids no seu form use isto dentro do form
' grid1,grid2 é o nome do seu grid
Private Sub grid1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Set mygrid = Grid1
End Sub
Private Sub grid2_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Set mygrid = grid2
End Sub