怎样使DataGrid支持鼠标滚轮滚动记录
2010-10-18 15:46
507 查看
在本站的VB源码《数据网格下拉列表框控件》中(链接地址:http://www.mndsoft.com/blog/article.asp?id=214)中,网友 taomaintao 提示支持滚轮鼠标,其实原本代码有已经有部分API代码意图支持鼠标滚轮,但可能作者后来没有加上。基于此,我找到一个解决办法(来自网络),taomaintao 网友可以按照下面自己进行修改吧。
首先在DataGrid 的 【拆分】 属性中的【选取框样式】设置为 3,即整行高亮选择,然后加入如下代码就支持了,只要让鼠标的焦点在grid控件上,滚动鼠标滑轮,grid滚动条会自动滚动的。
如果需要更平滑的滚动以及自定义滚动方法,我还有个代码,到时发给你,你自己研究吧。
示例操作方法:
将以下代码写到公共模块中
'支持滚轮鼠标API---------------------------------
Public Const GWL_WNDPROC = (-4)
Public Const WM_COMMAND = &H111
Public Const WM_MBUTTONDOWN = &H207
Public Const WM_MBUTTONUP = &H208
Public Const WM_MOUSEWHEEL = &H20A
Public Oldwinproc 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 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 Function FlexScroll(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
'支持滚轮的滚动 Yu 2004-5-10 15:33
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
'支持滚轮鼠标API---------------------------------
'将下列代码写到表格控件的GotFocus事件中
Private Sub 控件名称_GotFocus()
Oldwinproc = GetWindowLong(Me.hWnd, GWL_WNDPROC)
SetWindowLong Me.hWnd, GWL_WNDPROC, AddressOf FlexScroll
End Sub
'将下列代码写到表格控件的LostFocus事件中
Private Sub 控件名称_LostFocus()
SetWindowLong Me.hWnd, GWL_WNDPROC, Oldwinproc
End Sub
首先在DataGrid 的 【拆分】 属性中的【选取框样式】设置为 3,即整行高亮选择,然后加入如下代码就支持了,只要让鼠标的焦点在grid控件上,滚动鼠标滑轮,grid滚动条会自动滚动的。
如果需要更平滑的滚动以及自定义滚动方法,我还有个代码,到时发给你,你自己研究吧。
示例操作方法:
将以下代码写到公共模块中
'支持滚轮鼠标API---------------------------------
Public Const GWL_WNDPROC = (-4)
Public Const WM_COMMAND = &H111
Public Const WM_MBUTTONDOWN = &H207
Public Const WM_MBUTTONUP = &H208
Public Const WM_MOUSEWHEEL = &H20A
Public Oldwinproc 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 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 Function FlexScroll(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
'支持滚轮的滚动 Yu 2004-5-10 15:33
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
'支持滚轮鼠标API---------------------------------
'将下列代码写到表格控件的GotFocus事件中
Private Sub 控件名称_GotFocus()
Oldwinproc = GetWindowLong(Me.hWnd, GWL_WNDPROC)
SetWindowLong Me.hWnd, GWL_WNDPROC, AddressOf FlexScroll
End Sub
'将下列代码写到表格控件的LostFocus事件中
Private Sub 控件名称_LostFocus()
SetWindowLong Me.hWnd, GWL_WNDPROC, Oldwinproc
End Sub
相关文章推荐
- DataGrid支持鼠标滚轮滚动记录
- 使DataGrid支持鼠标滚轮滚动记录
- 如何让DbGrid支持鼠标滚轮滚动
- DataWindow如何彻底禁止鼠标滚轮滚动到下一条或上一条记录
- DBGrid支持鼠标滚轮滚动的解决办法
- 怎样隐藏滚动条还能滚动页面(包括鼠标滚轮)?
- 如何让DbGrid支持鼠标滚轮滚动 转
- 【来自FRATA系统】如何支持鼠标滚动事件
- 使VMWare下的Ubuntu支持鼠标滚轮
- VB6.0工作区对鼠标滚轮的支持
- ubuntu更改鼠标滚轮方向为自然方向(运动方向和滚轮滚动方向一致)
- DELPHI窗口支持鼠标中键滚动
- windows 修改鼠标滚轮自然滚动
- 判断鼠标滚轮的滚动方向
- delphi dbgrid支持鼠标滚动浏览
- win7 64位系统下,vb6.0支持鼠标滚轮功能
- 通过扩展Silverlight的控件DataGrid,使其垂直滚动条支持鼠标滑轮 (转)
- WPF 使用鼠标滚轮控制ListBox水平滚动条滚动
- [Silverlight]让DataGrid支持滚轮的山寨方法
- js改变图片大小——把鼠标放图片上,滚动鼠标滚轮.