我的dbgrid里面有10000条数据,DBGRid右边有滚动条
但是滚动条必须用鼠标拉
用中间的滚轮 滚动时 可右边的滚动条不动
是怎么回事啊?

解决方案 »

  1.   

    Form load中加入
    'mouse
    prevWndProc = GetWindowLong(Frm_GameList.DataGrid1.hWnd, GWL_WNDPROC)
    Call SetWindowLong(Frm_GameList.DataGrid1.hWnd, GWL_WNDPROC, AddressOf WndProc)在Module中,加入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 Frm_GameList.DataGrid1
    If wParam = -7864320 Then
    .Scroll 0, 5ElseIf wParam = 7864320 Then
    .Scroll 0, -5End If
    End With
    Else
    WndProc = CallWindowProc(prevWndProc, hWnd, Msg, wParam, lParam)
    End If
    End Function
    form unload事件中'mouse
    Call SetWindowLong(Frm_GameList.DataGrid1.hWnd, GWL_WNDPROC, prevWndProc1)
      

  2.   

    用DBGridEh
    好用多了^_^http://www.51delphi.com/delphi/soft?cx=ehlib
      

  3.   

    还是不要用滚动事件吧,去找个DBGridEh用用吧.