• Olá Visitante, se gosta do forum e pretende contribuir com um donativo para auxiliar nos encargos financeiros inerentes ao alojamento desta plataforma, pode encontrar mais informações sobre os várias formas disponíveis para o fazer no seguinte tópico: leia mais... O seu contributo é importante! Obrigado.

[vb] utilizar o scroll no flexgrid

Dark_KinG

GF Prata
Membro Inactivo
Entrou
Nov 12, 2007
Mensagens
210
Gostos Recebidos
1
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
 
Topo