Delphi 鼠标滚轮增量始终为正

Delphi 鼠标滚轮增量始终为正,delphi,Delphi,我试图使用Delphi 7中的TApplicationEvents.OnMessage事件检测鼠标滚轮的移动(同时按下CTRL键)。这是我正在使用的代码: if Msg.message = WM_MOUSEWHEEL then begin if Word(Msg.wParam) = MK_CONTROL then begin Edit1.Text := IntToStr(HiWord(Msg.wParam)); if HiWord(Msg.wParam) < 0 then be

我试图使用Delphi 7中的TApplicationEvents.OnMessage事件检测鼠标滚轮的移动(同时按下CTRL键)。这是我正在使用的代码:

if Msg.message = WM_MOUSEWHEEL then begin
 if Word(Msg.wParam) = MK_CONTROL then begin
  Edit1.Text := IntToStr(HiWord(Msg.wParam));
   if HiWord(Msg.wParam) < 0 then begin
    IncZoom;
   end else begin
    DecZoom;
   end;
 end;
end;
如果Msg.message=WM\u鼠标滚轮,则开始
如果Word(Msg.wParam)=MK_控件,则开始
Edit1.Text:=IntToStr(HiWord(Msg.wParam));
如果HiWord(Msg.wParam)<0,则开始
放大;
结束,否则开始
DecZoom;
结束;
结束;
结束;
根据MSDN resource(),HiWord的负值(Msg.wParam)表示控制盘已向后移动,朝向用户

问题是,当车轮向后移动时,我从未收到负值。当我向后滚动时,得到的值为120。当我向前滚动时,得到65416


我做错了什么?

HiWord
返回一个16位无符号整数。您链接的文档包括:

使用以下代码获取wParam参数中的信息:

  fwKeys = GET_KEYSTATE_WPARAM(wParam); 
  zDelta = GET_WHEEL_DELTA_WPARAM(wParam);
其中,
GET\u WHEEL\u DELTA\u WPARAM
在“winuser.h”中定义如下:

#define GET_WHEEL_DELTA_WPARAM(wParam)  ((short)HIWORD(wParam))
正如你所看到的,高字是由短字铸造而成的。A
SHORT
as A是一个16位有符号整数,对应于Delphi中的A。所以你可以这样投:

if Smallint(HiWord(Msg.wParam)) < 0 then begin
如果Smallint(HiWord(Msg.wParam))<0,则开始