在Delphi XE2中,对鼠标滚轮功能的建议支持是什么?

时间:2011-11-17 11:28:26

标签: delphi mousewheel delphi-xe2

我正在尝试整理我的代码,因为Delphi XE2可用 - 我的代码可以追溯到Borland Pascal 7,所以有很多'旧的'(但工作!)Win32技术,我自然也有平台独立性。此前已经提出了对鼠标滚轮的支持,并提出了几个先前的问题1 23。与其中一些答案一样,我自己的解决方案是使用TApplicationEvents组件进行简单的鼠标消息拦截:

  procedure TForm6.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);

  procedure ProcessMouseWheelMessage;
  begin
    Msg.message := WM_KEYDOWN;

    Msg.lParam := 0;

    If Integer(Msg.wParam) > 0 then
      Msg.wParam := VK_UP
    else
      Msg.wParam := VK_DOWN;

    Handled := False;
  end;

begin
  Case Msg.message of
    WM_MOUSEWHEEL :
      ProcessMouseWheelMessage;
  end;
end;

我今天重新访问了这段代码,因为'Msg.wParam'现在是NativeInt,在上面的代码中使用了负的Msg.wParam值,除非你使用Integer(Msg.wParam)。它让我注意到我没有看到任何真正明确使用鼠标滚轮的Delphi代码 - 当所有鼠标现在都有轮子并且Delphi再次处于'前沿'时可怕!我本来期望一个属性,一个组件或一些其他更“暴露”的解决方案,以及Fire Monkey车轮支持怎么样?

我是继续使用我的解决方案还是有更好的方法?

2 个答案:

答案 0 :(得分:6)

在XE2(以及所有最近发布的版本)中,您不需要做任何事情。标准控件支持鼠标滚轮开箱即用。只是摆脱这个旧代码。

答案 1 :(得分:3)

具有Windows句柄(TWinControl的后代)的Delphi组件具有OnMouseWheelOnMouseWheelUpOnMouseWheelDown个事件。

如果要将鼠标滚轮事件添加到不从TWinControl下降的控件,请参阅此文章:http://delphi.about.com/od/delphitips2010/qt/timage-handling-mouse-wheel-messages.htm