欢迎光临:
非常感谢您光临枕善居。本站是一个免费的基于VB,VB.NET源代码交流的平台,为大家提供优质的专业的源代码,如果您有需要,本站可以帮助在业余时间里给您寻找代码。当然,如果您有好的代码也可以在本站发布,共享给大家。
专业VB和.NET源码、编程开发教程、图标资源、USB电脑遥控器、智能家电控制开关....更多东东请进入我的淘宝小店--->
VB及.NET新源码2011(3DVD,控件+资源)
智能多路控制(串口编程开关) 带源码!
07-05
17
怎样使DataGrid支持鼠标滚轮滚动记录
作者:枕善居主 / 查看次数: 11351 / 评论: 9
在本站的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
【VB和.NET专业源码+解决方案+数据字典DVD光盘(全国包快递)】 点击查看源代码清单
首先在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
回复
]感谢,成功解决了。
引用来自 linger505 Select Case wParam
Case -7864320 '向下滚
'SendKeys "{PGDN}"
DataGrid1.Scroll 0, 1
Case 7864320 '向上滚
'SendKeys "{PGUP}"
DataGrid1.Scroll 0, -1
End Select
粗体部分的一次只滚动一行.
Case -7864320 '向下滚
'SendKeys "{PGDN}"
DataGrid1.Scroll 0, 1
Case 7864320 '向上滚
'SendKeys "{PGUP}"
DataGrid1.Scroll 0, -1
End Select
粗体部分的一次只滚动一行.
这个方法可能对于窗体中只有一个表格的比较实用,多个表格 可能就不适用了。
我的试验方法是
sendkeys{"down"}/sendkeys{"up"}
这样一次滚动一行,多个表格也可以方便控制,只要获得焦点即可。
不过好像在我的程序中,通过一个表格来控制多个表格的记录集时,这个表格滚动时不太流畅,可能查询花了时间吧。
Select Case wParam
Case -7864320 '向下滚
'SendKeys "{PGDN}"
DataGrid1.Scroll 0, 1
Case 7864320 '向上滚
'SendKeys "{PGUP}"
DataGrid1.Scroll 0, -1
End Select
粗体部分的一次只滚动一行.
Case -7864320 '向下滚
'SendKeys "{PGDN}"
DataGrid1.Scroll 0, 1
Case 7864320 '向上滚
'SendKeys "{PGUP}"
DataGrid1.Scroll 0, -1
End Select
粗体部分的一次只滚动一行.
经测试没问题,学到不少东西,居主能否发给我一份能平滑滚动的代码,现在的是一次滚动3行,我的邮箱jackleeboy01@163.com,万分感谢!!
其实在开始我就用了你说的这种方法了,今晚又试了,还是不行.5555555
在DataGrid 的 【拆分】 属性中的【选取框样式】设置为 3,即整行高亮选择
控件本身就是这个属性,另外我按你说的方法做了,但还是不行,原因为根本没有办法让datagrid得到焦点,代码确实有些复杂,焦身始终位于那个textbox上,请大哥帮忙改一下吧,你对VB精通,花不了多少时间,我可是请了好多高手也没法解决,问了好多人,加起来有几天的时间了,试了很多方法,就帮帮我吧.
十二分的感谢大哥,我会长期支持本站的,祝越办越好.
也请同行的朋友帮帮忙吧.
QQ:25241894
控件本身就是这个属性,另外我按你说的方法做了,但还是不行,原因为根本没有办法让datagrid得到焦点,代码确实有些复杂,焦身始终位于那个textbox上,请大哥帮忙改一下吧,你对VB精通,花不了多少时间,我可是请了好多高手也没法解决,问了好多人,加起来有几天的时间了,试了很多方法,就帮帮我吧.
十二分的感谢大哥,我会长期支持本站的,祝越办越好.
也请同行的朋友帮帮忙吧.
QQ:25241894
谢谢大哥,我马上研究一下,还没有解决呢
发表评论
您没有权限发表评论!
上一篇
下一篇
相关日志:
文章来自:
Tags:
评论: 9 | 
