按下Shift键处理鼠标滚轮事件

问题描述:

如果在按下Shift键时使用鼠标滚轮,我想实现水平滚动。但我并不在此情况下得到任何WM_MOUSEWHEEL消息:按下Shift键处理鼠标滚轮事件

procedure WMMouseWheel(var Msg: TMessage); message WM_MOUSEWHEEL; // is not called 

按照documentation,应该有一个WM_MOUSEWHEEL消息MK_SHIFT WPARAM。

任何想法?

+1

有很多信息:[如何指导鼠标滚轮输入控制光标而不是聚焦?](https://*.com/a/34386680/757830)和[如何添加鼠标滚轮是否支持TGraphicControl后续组件?](https://*.com/a/34463279/757830)。 – NGLN

我在代码库中找到这段代码:

procedure TMyScrollBox.WndProc(var Message: TMessage); 
begin 
    if Message.Msg=WM_MOUSEHWHEEL then begin 
    (* For some reason using a message handler for WM_MOUSEHWHEEL doesn't work. 
     The messages don't always arrive. It seems to occur when both scroll bars 
     are active. Strangely, if we handle the message here, then the messages 
     all get through. Go figure! *) 
    if TWMMouseWheel(Message).Keys=0 then begin 
     HorzScrollBar.Position := HorzScrollBar.Position + TWMMouseWheel(Message).WheelDelta; 
     Message.Result := 0; 
    end else begin 
     Message.Result := 1; 
    end; 
    end else begin 
    inherited; 
    end; 
end; 

所以,你有它。我不明白为什么会出现这种情况,但您应该可以像我这样做,并覆盖WndProc来处理此消息。

+1

[鼠标滚轮的奥德赛](https://*.com/a/34386680/757830) – NGLN