在MSHFLEXGIRD里如何实现滚轮移动的时候那条蓝色选中条也跟着一起移动呢?

解决方案 »

  1.   

    MSHFLEXGIRD 滚轮移动我事件和方法..呵呵..只能借助外部了.用API..具体..自已查一查吧.
      

  2.   

    Option ExplicitPrivate m_intOffsetRows As IntegerPrivate Sub Form_Load()
        Dim i As Integer
        MSHFlexGrid1.FixedCols = 0
        MSHFlexGrid1.FixedRows = 1
        MSHFlexGrid1.FormatString = "<SubItem1      |<SubItem2      |<SubItem3      |<SubItem4      |<SubItem5      |<SubItem6      "
        MSHFlexGrid1.Rows = 50
        MSHFlexGrid1.SelectionMode = flexSelectionByRow
        MSHFlexGrid1.Move 100, 100, 5000, 3000
        MSHFlexGrid1_EnterCell
    End SubPrivate Sub MSHFlexGrid1_EnterCell()
        Dim i As Integer
        MSHFlexGrid1.Redraw = False
        For i = MSHFlexGrid1.Cols - 1 To 0 Step -1
            MSHFlexGrid1.Col = i
            MSHFlexGrid1.CellBackColor = vbHighlight
        Next
        MSHFlexGrid1.Redraw = True
        m_intOffsetRows = MSHFlexGrid1.Row - MSHFlexGrid1.TopRow
    End SubPrivate Sub MSHFlexGrid1_LeaveCell()
        Dim i As Integer
        MSHFlexGrid1.Redraw = False
        For i = MSHFlexGrid1.Cols - 1 To 0 Step -1
            MSHFlexGrid1.Col = i
            MSHFlexGrid1.CellBackColor = MSHFlexGrid1.BackColor
        Next
        MSHFlexGrid1.Redraw = True
    End SubPrivate Sub MSHFlexGrid1_Scroll()
        MSHFlexGrid1_LeaveCell
        MSHFlexGrid1.Row = MSHFlexGrid1.TopRow + m_intOffsetRows
        MSHFlexGrid1_EnterCell
    End Sub
      

  3.   

    首先在模块里面Public Const GWL_WNDPROC = (-4)
    Public Const WM_COMMAND = &H111
    Public Const WM_MBUTTONDOWN = &H207
    Public Const WM_MBUTTONUP = &H208
    Public Const WM_MOUSEWHEEL = &H20APublic Oldwinproc As Long''这个公共变量用来保存句柄的Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, _
     ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPublic 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 LongPublic Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, _
     ByVal nIndex As Long) As Long
    Public Function FlexScroll(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    '支持滚轮的滚动 
             Select Case wMsg
                      
                    Case WM_MOUSEWHEEL
                         
                        Select Case wParam                           Case -7864320  '向下滚
                                    SendKeys "{PGDN}"                           Case 7864320   '向上滚
                                    SendKeys "{PGUP}"                    End Select
                         
             End Select
             
             FlexScroll = CallWindowProc(Oldwinproc, hWnd, wMsg, wParam, lParam)
             
    End Function
    然后在窗体里面放一个msflexgrid
    写入下面代码
    Private Sub Mfg_GotFocus()
        
        Oldwinproc = GetWindowLong(Me.hWnd, GWL_WNDPROC)''得到原来窗体的句柄,到时候要还回去的
         SetWindowLong Me.hWnd, GWL_WNDPROC, AddressOf FlexScroll
    End SubPrivate Sub Mfg_LostFocus()
        SetWindowLong Me.hWnd, GWL_WNDPROC, Oldwinproc''在失去焦点的时候,就还回去句柄End Sub只能参考,这是原来别人写的,希望对你有帮助。