Delphi 鼠标滚轮增量始终为正
我试图使用Delphi 7中的TApplicationEvents.OnMessage事件检测鼠标滚轮的移动(同时按下CTRL键)。这是我正在使用的代码: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
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))
正如你所看到的,高字是由短字铸造而成的。ASHORT
as A是一个16位有符号整数,对应于Delphi中的A。所以你可以这样投:
if Smallint(HiWord(Msg.wParam)) < 0 then begin
如果Smallint(HiWord(Msg.wParam))<0,则开始