阻止访问外部 ActiveX 控件中的鼠标滚轮行为
Posted
技术标签:
【中文标题】阻止访问外部 ActiveX 控件中的鼠标滚轮行为【英文标题】:Block Access mousewheel behavior in external ActiveX controls 【发布时间】:2008-11-12 16:10:59 【问题描述】:在 Access (2002 / 2003) 数据绑定表单中,转动鼠标滚轮会移动到下一条/上一条记录,即使光标位于多行文本字段或列表框内。这对用户来说是一个很大的烦恼,不能轻易关闭。
我最近发现了一个名为 MouseHook (http://www.lebans.com/mousewheelonoff.htm) 的 DLL,它可以有效地阻止这种鼠标滚轮行为并将其替换为更多预期的行为。
但是,当将外部 ActiveX 控件添加到 Access 表单时,此模块不执行任何操作。例如,我有一个带有 FlexGrid 控件的表单,它可以包含很多行。当用户尝试使用鼠标滚轮滚动时,Access 会再次转到另一条记录,即使已加载 MouseHook DLL。
是否有类似 MouseHook DLL 但也适用于外部 ActiveX 控件的解决方案?或者是否提供 MouseHook DLL 的源代码,以便对其进行修改以处理 FlexGrid 等控件?
PS:我想问问 MouseHook DLL 的作者,但他目前“暂停”到 2009 年 6 月。
【问题讨论】:
【参考方案1】:如果您确实必须更改 UI 并更改用户期望鼠标滚轮工作的方式,我实际上建议您禁用它而不是更改它的滚动方式。虽然它的滚动对您来说可能看起来很奇怪,但这就是程序的工作方式。如果您必须整天阅读 PDF,然后有一天有人认为鼠标滚轮滚动的工作方式不够好并更改为默认为巨大的跳跃或水平或其他方式,您会怎么做。是的,它可能是一个更好的解决方案,但是它对用户来说很烦人,因为它没有做它应该做的事情。
【讨论】:
【参考方案2】:为什么在 Access 中使用 flexgrid?对我来说,这是一个读取标志,您可能正在以与 Access 敌对的观点来处理该项目,因为您似乎选择非本机控件来执行几乎总是使用 Access 的本机控件更容易完成的事情。
【讨论】:
【参考方案3】:挂钩 flexgrid,拦截 WM_MOUSEWHEEL 消息,忽略它并调用您的预期行为。
【讨论】:
【参考方案4】:不是直接回答您的问题,但我们处理鼠标滚轮移动的方式是防止用户开始编辑后意外更改记录。当用户打开表单时,***会像往常一样随意移动记录。一旦用户在字段上编辑某些内容,然后移动鼠标滚轮,就会触发 BeforeUpdate 事件,这会导致我们的代码提示他们必须先保存记录。我们有一个保存按钮,用户必须明确按下该按钮才能抑制更新前事件中的警告。
【讨论】:
以上是关于阻止访问外部 ActiveX 控件中的鼠标滚轮行为的主要内容,如果未能解决你的问题,请参考以下文章