Access交流网
  • 设为首页|收藏本站|繁体中文|手机版
  •     
  • Access培训-Access开发平台-Access行业开发

  • 首页
  • 资讯
  • 技巧
  • 源码
  • 行业
  • 资源
  • 活动
  • 关于

技巧

ACCESS数据库

启动/设置/选项/背景

修复/压缩

安全/加密/解密

快捷键

版本升级/其它等

数据表

命名方式/设计规范

表设计

查询

Sql语言基础

选择查询

更新查询

删除查询

追加查询

生成表查询

交叉表查询

SQL特定查询

查询参数

查询综合应用

界面/窗体/控件

标签

文本框

命令按钮

组合框/列表框

选项组/复选框/选项按钮

选项卡

子窗体

窗体本身/综合应用

其它

报表打印

报表设计

高级报表

模块/函数/VBA/API/系统

VBA基础

内置函数

调试/跟踪/Debug

模块/类模块

API/COM/系统相关

字符数字日期

网络通信游戏

加密解密安全

文件处理

经典算法

宏/菜单/工具栏/功能区

宏/脚本

菜单/工具栏

功能区/Ribbon

图表/图形/图像/多媒体

图表

图形/图像

音频

视频/动画

DAO/链接表/ADO/ADP

DAO/链接表/ODBC

ADO/RDO

ADP

ActiveX/第三方控件/插件

Treeview树控件

ListView列表控件

Toolbar工具栏控件

微软其它控件

Dbi-Tech

CodeJock

Grid++Report

FastReport

ComponentOne

加载项/插件/Addin

OFFICE集成/导入导出/交互

Excel导入导出/交互

Word导入导出/交互

PPT交互

Outlook控制/邮件

Text文本文件/INI/CSV

PDF/SWF/XML格式

CAD格式

Sharepoint/其它Office

SqlServer/其它数据库

表

视图

存储过程/触发器

函数

用户/权限/安全

调试/维护

SqlServer其它/综合

发布/打包/文档/帮助

开发版/运行时

打包/发布/部署

开发文档/帮助制作

Access完整行业系统

采购管理系统

销售管理系统

仓库管理系统

人力资源管理HRM

CRM管理系统

MRP/ERP管理系统

BRP/流程优化

其它管理系统

心得/经验/绝招
其它/杂项
Excel技巧

Excel应用与操作

Excel开发编程

Word技巧

Word应用与操作

Word开发编程

Outlook技巧

Outlook应用与操作

Outlook开发编程

热门文章

  • 剖析 Declare 语句
  • 如何关闭计算机?
  • 返回CPU16位16进制序..
  • Access利用API创建..
  • 定时自动关闭msgbox ..
  • 如何让你的程序在任务列表隐..

最新文章

  • Access API函数分..
  • Access VBA 注册..
  • Access Excel ..
  • 毫秒级和纳秒级计时的API..
  • 一种比GetTickCou..
  • VB用PrevInstan..

联系方式

Access交流网(免费Access交流)

QQ:18449932 

网  址:www.access-cn.com

当前位置:首页 > 技巧 > 模块/函数/VBA/API/系统 > API/COM/系统相关
API/COM/系统相关

Access或VB为任何控件添加鼠标滚轮事件(适用VB及VBA)

Access或VB为任何控件添加鼠标滚轮事件

Access及VB 的有些控件不支持鼠标滚轮,或滚轮的行为不是你需要的,默认的滚轮可能是上下移动,本程序实现捕获任何控件的鼠标滚轮事件。

程序运行后,当窗口的焦点控件是水平滚动条时,滚动鼠标滚轮,滚动条的滑块即可上下移动。

当窗口焦点控件是按钮时,滚动鼠标滚轮,可改变窗口的大小。

单击一下图片框,滚动鼠标滚轮可改变图片框的大小。

滚动鼠标滚轮要实现的效果,可通过修改模块的“MousScroll”过程实现。

调试注意:本程序是通过拦截窗口消息捕获鼠标滚轮事件的。VB 在处理窗口消息回调函数的时候,运行时如果设置断点,很容易造成程序无响应异常终止。因此,修改代码后应及时保存。


如果是Access, 可以在控件的获得焦点事件(GetFocus)绑定钩子,在失去焦点事件(LostFocus)中释放钩子


以下代码摘自网络:

'''本程序包含一个窗体 Form1 和一个模块 Module1,在 VB6 和 WinXP 下调试通过。

'以下是窗体 Form1 代码 =====================================

'在窗体添加以下控件,不用设置任何属性:

'   按钮1个:Command1

'   图片框1个:Picture1

'   水平滚动条1个:HScroll1

'   垂直滚动条1个:VScroll1

 

Private Sub Form_Load()

   Me.Caption = "捕获鼠标滚轮事件"

   Command1.Caption = "新窗口"

   VScroll1.Max = 100

   HScroll1.Max = 100

   Picture1.Picture = Me.Icon

End Sub


Private Sub Form_Activate()

   StartProc Me '开始拦截窗口消息

End Sub


Private Sub Form_Unload(Cancel As Integer)

   StopProc '停止拦截窗口消息

End Sub


Private Sub Command1_Click()

  Dim nForm As New Form1

  nForm.Show

End Sub


以下是模块 Module1 代码 =====================================

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 Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long

Private Const GWL_WNDPROC = -4

Private Const WM_MOUSEWHEEL = &H20A

Dim moProc As Long, moForm As Form


'自定滚轮事件

Private Sub MousScroll(ByVal nVal As Single)

   '获取鼠标滚轮事件后,要做的事情

   'nVal=1 表示鼠标滚轮向下滚,nVal=-1 表示鼠标滚轮向上滚

   Dim Kj As Object, nType As String, W As Single, H As Single

   

   If moForm Is Nothing Then Exit Sub

   On Error Resume Next

   Set Kj = moForm.ActiveControl

   nType = TypeName(Kj)

   

   Select Case nType

   Case "HScrollBar", "VScrollBar" '焦点控件是滚动条

      nVal = Kj.Value + nVal * 3

      If nVal > Kj.Max Then nVal = Kj.Max

      If nVal < Kj.Min Then nVal = Kj.Min

      Kj.Value = nVal

   Case "PictureBox" '焦点控件是图片框,改变控件大小,每次 3 个像素

      W = Kj.Container.ScaleX(Kj.Width, Kj.Container.ScaleMode, 3) + nVal * 3

      H = Kj.Container.ScaleY(Kj.Height, Kj.Container.ScaleMode, 3) + nVal * 3

      If W < 4 Or H < 4 Then Exit Sub

      W = Kj.Container.ScaleX(W, 3, Kj.Container.ScaleMode)

      H = Kj.Container.ScaleY(H, 3, Kj.Container.ScaleMode)

      Kj.Move Kj.Left, Kj.Top, W, H

   Case Else '其他情况:改变窗体大小,每次 3 个像素

      W = moForm.Width + nVal * Screen.TwipsPerPixelX * 3

      H = moForm.Height + nVal * Screen.TwipsPerPixelY * 3

      If W < 90 Or H < 90 Then Exit Sub

      moForm.Move moForm.Left, moForm.Top, W, H

   End Select

End Sub


Private Function WinProc(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

   '窗口消息回调函数

   If wMsg = WM_MOUSEWHEEL Then

      If wParam = -7864320 Then MousScroll 1 '鼠标滚轮向下滚

      If wParam = 7864320 Then MousScroll -1 '鼠标滚轮向上滚

   End If

   WinProc = CallWindowProc(moProc, hWnd, wMsg, wParam, lParam)

End Function


Public Sub StartProc(nForm As Form)

   '开始拦截窗口消息

   Dim nWnd As Long

   On Error GoTo Err1

   nWnd = nForm.hWnd

   Call StopProc '开始前,先还原

   On Error GoTo 0

   moProc = GetWindowLong(nWnd, GWL_WNDPROC)

   SetWindowLong nWnd, GWL_WNDPROC, AddressOf WinProc

   Set moForm = nForm

   Exit Sub

Err1:

   MsgBox Err.Description

End Sub


Public Sub StopProc()

   '停止拦截窗口消息:还原窗口消息地址

   If moProc = 0 Or (moForm Is Nothing) Then Exit Sub

   SetWindowLong moForm.hWnd, GWL_WNDPROC, moProc

   moProc = 0

End Sub


其它相关可参考的代码:

VB 获得鼠标滚轮的事件

  '窗体代码
Private Sub Form_Load()
HookMouse Me.hwnd
End Sub

Private Sub Form_Unload(Cancel As Integer)
UnHookMouse Me.hwnd
End Sub

  '模块代码
'***********************************************************
'mMouseWheel
'鼠标滚轮的事件检测
'***********************************************************
Option Explicit

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

Private Const GWL_WNDPROC = -4
Private Const WM_MOUSEWHEEL = &H20A

Global lpPrevWndProcA As Long

Public bMouseFlag As Boolean '鼠标事件激活标志

Public Sub HookMouse(ByVal hwnd As Long)
lpPrevWndProcA = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub

Public Sub UnHookMouse(ByVal hwnd As Long)
SetWindowLong hwnd, GWL_WNDPROC, lpPrevWndProcA
End Sub

Private Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Select Case uMsg
Case WM_MOUSEWHEEL '滚动
Dim wzDelta, wKeys As Integer
'wzDelta传递滚轮滚动的快慢,该值小于零表示滚轮向后滚动(朝用户方向),
'大于零表示滚轮向前滚动(朝显示器方向)
wzDelta = HIWORD(wParam)
'wKeys指出是否有CTRL=8、SHIFT=4、鼠标键(左=2、中=16、右=2、附加)按下,允许复合
wKeys = LOWORD(wParam)
'--------------------------------------------------
If wzDelta < 0 Then '朝用户方向
Form1.Cls
Form1.Print "朝用户方向滚"
Else '朝显示器方向
Form1.Cls
Form1.Print "朝显示器方向"
End If
'--------------------------------------------------
Case Else
WindowProc = CallWindowProc(lpPrevWndProcA, hw, uMsg, wParam, lParam)
End Select
End Function

Private Function HIWORD(LongIn As Long) As Integer
HIWORD = (LongIn And &HFFFF0000) \ &H10000 '取出32位值的高16位
End Function
Private Function LOWORD(LongIn As Long) As Integer
LOWORD = LongIn And &HFFFF& '取出32位值的低16位
End Function



发布人:zstmtony  
分享到:
点击次数:  更新时间:2017-01-20 15:02:33  【打印此页】  【关闭】
上一条:sql Server 2005提示未能加载包"Microsoft SQL Management Studio Package  下一条:平台生成窗体之后再添加新的字段,窗体如何修改



相关文章

  • • Access API函数分享
  • • Access VBA 注册表操作源码
  • • Access Excel VBA程序同时兼容32位和64位的解决办法
  • • 毫秒级和纳秒级计时的API--timeGetTime、GetTickCount、QueryPerformanceCounter
  • • 一种比GetTickCount 和Timer更精确的计时器
  • • VB用PrevInstance和DDE实现禁止多个实例同时打开并传递命令
  • • 获取版本号及判断是否运行版本
  • • API获取网卡地址

热门文章

  • [2004-11-23] 用代码创建 DSN(SQL Server ODBC)access数据库
  • [2005-08-16] 隐藏Access主窗口之一access数据库
  • [2003-12-20] 如何隐藏及再显示鼠标access数据库
  • [2005-08-16] Access让窗体总在最前面?access数据库
  • [2004-01-05] 返回CPU16位16进制序列号access数据库
  • [2017-01-20] Access或VB为任何控件添加鼠标滚轮事件(适用VB及VBA)access数据库

热门产品

公司动态|在线留言|在线反馈|友情链接|会员中心|站内搜索|网站地图

Access交流网 版权所有 1999-2018 粤ICP备10043721号

QQ:18449932

Access应用 Access培训 Access开发 Access平台

access|数据库|access下载|access教程|access视频|access软件

Powered by MetInfo 5.3.12 ©2008-2023  www.metinfo.cn