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

jum4pzuy  于 2022-09-21  发布在  其他
关注(0)|答案(1)|浏览(241)

如果在按Shift键的同时使用鼠标滚轮,我想实现水平滚动。但在这种情况下,我没有收到任何WM_MOUSEWHEEL消息:

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

根据documentation,应该有一条带有MK_SHIFT WPARAM的WM_MOUSEWHEEL消息。

有什么主意吗?

pokxtpni

pokxtpni1#

编辑:下面的代码使用WM_MOUSEH滚轮,而不是WM_MICE滚轮来处理水平滚动。

我在我的代码库中找到了以下代码:

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来处理此消息。

相关问题