请文各位前辈,想在GRID中解决鼠标中键浏览数据的问题,我要怎么做呢,可以的话给串代码参考啊。
这是小弟在CSDN的第一个问题,希望前辈们能够赏脸...

解决方案 »

  1.   

    Option ExplicitPublic Const GWL_WNDPROC = (-4)
    Public Const WM_COPYDATA = &H4A
    Public Const WM_MOUSEWHEEL = &H20A
    Public Type COPYDATASTRUCT
       dwData As Long
       cbData As Long
       lpData As Long
    End TypePublic 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 Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) 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 Sub RtlMoveMemory Lib "kernel32" (lpvDest As Any, lpvSource As Any, ByVal cbCopy As Long)Public prevWndProc As Long
    Public Function WndProc(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
       If Msg = WM_MOUSEWHEEL Then
          With Form1.MSHFlexGrid1
             If wParam = -7864320 Then 
                .TopRow = .TopRow + 1'向下滚动
             ElseIf wParam = 7864320 Then  
                If .TopRow > 1 Then
                   .TopRow = .TopRow - 1'向上滚动
                End If
             End If
          End With
       Else
          WndProc = CallWindowProc(prevWndProc, hWnd, Msg, wParam, lParam)
       End If
    End Function所在窗体:Private Sub Form_Load()
       '表格窗口消息
       prevWndProc = GetWindowLong(MSHFlexGrid1.hWnd, GWL_WNDPROC)
       Call SetWindowLong(MSHFlexGrid1.hWnd, GWL_WNDPROC, AddressOf WndProc)
    End SubPrivate Sub Form_Unload(Cancel As Integer)
       '恢复窗口程序
       Call SetWindowLong(MSHFlexGrid1.hWnd, GWL_WNDPROC, prevWndProc1)
    End Sub
      

  2.   

    or
    MSFlexGrid MouseWheel Supported 
    http://blog.csdn.net/yinweihong/archive/2004/09/25/116638.aspx
      

  3.   

    请教在MSFlexGrid MouseWheel Supported中下列的在窗体中的代码要怎么调用才可以实现在GRID中滚动啊,传什么值啊?我是菜鸟啊,请举个例子啊好不好啊谢过先。
    Private Sub Form_Load()
        Call WheelHook(Form1)
    End SubPrivate Sub Form_Unload(Cancel As Integer)
        Call WheelUnHook
    End Sub
    Public Sub MouseWheel(ByVal MouseKeys As Long, ByVal Rotation As Long, ByVal Xpos As Long, ByVal Ypos As Long)
        Dim NewValue As Long
        Dim Lstep As Single    On Error Resume Next    With MSFlexGrid1
            Lstep = .Height / .RowHeight(0)
            Lstep = Int(Lstep)
            If Lstep < 10 Then
                Lstep = 10
            End If
            If Rotation > 0 Then
                NewValue = .TopRow - Lstep
                If NewValue < 1 Then
                    NewValue = 1
                End If
            Else
                NewValue = .TopRow + Lstep
                If NewValue > .Rows - 1 Then
                    NewValue = .Rows - 1
                End If
            End If
            .TopRow = NewValue
        End With
    End Sub
      

  4.   

    同意lxcc的写法 
    这是一个标准的callback问题