delphi - MouseWheelDown 事件连续触发多次

标签 delphi mousewheel

Windows 7 上的 Delphi 7

我想使用鼠标滚轮向下滚动列表(TElTree)...所以我开始在 ElTree 的 OnMouseWheelDown 事件中编写一些代码。然后我注意到它一次滚动 2 行。控制面板中的鼠标滚轮设置设置为一次仅滚动 1 行。如果我在事件处理程序中放置一个断点,我会发现事件处理程序本身被快速连续执行两次......为什么?如何确保它只执行一次(请提供代码)?

最佳答案

当滚轮滚动时,操作系统会发送 WM_MOUSEWHEEL 消息。 wParam 参数的高位字表示车轮转动了多远。如果它转动了一次“咔哒声”,则其值将为 120 或 WHEEL_DELTA。但如果您的滚轮识别出的滚动次数少于一次点击的值,则该值可能会小于该值。

正确的WM_MOUSEWHEEL消息处理程序需要考虑该参数,并且要么保留一个“滚动累加器”来跟踪滚轮滚动的距离,要么能够滚动少于整行。 假设每条消息都表示完全点击滚轮的消息处理程序将会感到抱歉。

关于delphi - MouseWheelDown 事件连续触发多次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3698472/

相关文章:

delphi - JVCL 2.10 和德尔福 2010

delphi - Delphi中删除字符串中的多个子字符串

delphi - 为什么此资源指令显示在可用表单列表中?

delphi - 如何在delphi 10中使用带有idhttp的线程

javascript - 我可以判断滚动条是否已经处理了鼠标滚轮事件吗?

database - 无法使用 Delphi XE2 连接到 Firebird 2.5 服务器

java - 检测鼠标滚轮停止

jquery鼠标滚轮: detecting when the wheel stops?

javascript - 防止窗口滚动,然后在单击按钮后解除绑定(bind) - Jquery

javascript - 使用鼠标滚轮和侧边栏更改 Div Y 位置