Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 按住shift键处理鼠标滚轮事件_Delphi_Delphi 10.1 Berlin - Fatal编程技术网

Delphi 按住shift键处理鼠标滚轮事件

Delphi 按住shift键处理鼠标滚轮事件,delphi,delphi-10.1-berlin,Delphi,Delphi 10.1 Berlin,如果在按下Shift键的同时使用鼠标滚轮,我想实现水平滚动。但在这种情况下,我没有收到任何WM_mouseweel消息: procedure WMMouseWheel(var Msg: TMessage); message WM_MOUSEWHEEL; // is not called 根据,应该有一条带有MK\u SHIFTWPARAM的WM\u鼠标滚轮消息 有什么想法吗?我在我的代码库中找到了以下代码: procedure TMyScrollBox.WndProc(var Message

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

procedure WMMouseWheel(var Msg: TMessage); message WM_MOUSEWHEEL;  // is not called
根据,应该有一条带有
MK\u SHIFT
WPARAM的
WM\u鼠标滚轮
消息


有什么想法吗?

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

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

在:和上有很多信息。