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/