VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1004|回复: 6

项目中用的表格控件全是msflexgrid,可是现在客户要求表格都要支持滚轮,我不知如何办了

[复制链接]

1

主题

9

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-1-5 13:10:01 | 显示全部楼层 |阅读模式
我的项目中没用到第三方的表格控件,都是自带的msflexgrid,可是这个控件不支持鼠标滚轮呀。现在客户提出这个要求如何办呀。
更换表格控件一定是不可能了。工作量大了。只想在使用msflexgrid的前提下想办法。
请大家帮我。
回复

使用道具 举报

0

主题

3

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-1-5 17:57:01 | 显示全部楼层
1、HOOK,网上有代码,现成的。
PS:找不到可以找我购买。

2、换其他的,推荐ListView报表式。
回复

使用道具 举报

1

主题

9

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
 楼主| 发表于 2020-1-6 06:45:01 | 显示全部楼层
2、换其他的,推荐ListView报表式。
-----------------------
呵,可是listview毕竟不是真正的表格呀。也想到过用它。

       

1、HOOK,网上有代码,现成的。
---------------
目前还没找到,找到几个代码,可是测试不行。再找找。
回复

使用道具 举报

1

主题

6

帖子

6.00

积分

新手上路

Rank: 1

积分
6.00
发表于 2020-1-8 09:00:02 | 显示全部楼层
有可用代码的...
如果找不到可找我...
回复

使用道具 举报

2

主题

5

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-1-8 11:18:01 | 显示全部楼层
请将代码贴到网上,大家共享,谢谢.
回复

使用道具 举报

0

主题

8

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
发表于 2020-3-29 16:45:01 | 显示全部楼层
以下程序放在一个公共模块中,
在窗体中的form_load事件中 写 HookWheel me.hwnd
在窗体中的form_unload事件中 写 UnHookWheel me.hwnd
在表格的GotFocus事件中 set CtlWheel=MSFlexGrid1  '( 表格名称,根据具体情况,修改这个名称)

在表格的LostFocus事件中 set CtlWheel=Nothing'( 表格名称,根据具体情况,修改这个名称)


Option Explicit

Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private 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

Private Const GWL_WNDPROC   As Long = (-4)
Private Const WM_MOUSEWHEEL As Long = &H20A


Private m_OldWindowProc As Long

Public CtlWheel As Object

Public Sub HookWheel(ByVal frmHwnd)

    m_OldWindowProc = SetWindowLong(frmHwnd, GWL_WNDPROC, AddressOf pvWindowProc)
End Sub

Public Sub UnHookWheel(ByVal hwnd As Long)
    Dim lngReturnValue As Long
    lngReturnValue = SetWindowLong(hwnd, GWL_WNDPROC, m_OldWindowProc)
   
End Sub

Private Function pvWindowProc(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    On Error GoTo errH
   
    Select Case wMsg
   
        Case WM_MOUSEWHEEL
            If Not CtlWheel Is Nothing Then
                 If TypeOf CtlWheel Is MSFlexGrid Then
                     With CtlWheel
                    
                             Select Case wParam
                             Case Is > 0
        
                                If CtlWheel.TopRow > 0 Then
                                    CtlWheel.TopRow = CtlWheel.TopRow - 1
                                End If
                                
                             Case Else
                              
                                CtlWheel.TopRow = CtlWheel.TopRow + 1
                                
                             End Select
                      End With
                  End If
                  
           End If
    End Select
   
errH:
   
    pvWindowProc = CallWindowProc(m_OldWindowProc, hwnd, wMsg, wParam, lParam)
End Function

回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-8-21 07:00:01 | 显示全部楼层
新建了一个工程试验了你的代码,运行很正常,非常感谢

把这些代码加到我的一个程序中后,运行也正常.但是在VB环境中按F5执行的时候,一旦关闭程序,不仅程序关闭了,连VB也关闭了~~请问这是怎么回事??(在我新建工程试验的时候不会出现这种情况)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表