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

Delphi XE2中对鼠标滚轮功能的建议支持是什么?,delphi,mousewheel,delphi-xe2,Delphi,Mousewheel,Delphi Xe2,现在Delphi XE2可用了,我正试图整理我的代码——我的代码可以追溯到Borland Pascal 7,所以有很多“旧的”(但仍在工作!)Win32技术,当然我也考虑到了平台独立性。在此之前,我们已经提出了一些关于鼠标滚轮的问题和建议。与其中一些答案一样,我自己的解决方案是使用TApplicationEvents组件进行简单的鼠标消息拦截: procedure TForm6.ApplicationEvents1Message(var Msg: tagMSG; var Handled:

现在Delphi XE2可用了,我正试图整理我的代码——我的代码可以追溯到Borland Pascal 7,所以有很多“旧的”(但仍在工作!)Win32技术,当然我也考虑到了平台独立性。在此之前,我们已经提出了一些关于鼠标滚轮的问题和建议。与其中一些答案一样,我自己的解决方案是使用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值,除非您使用整数(Msg.wParam)。这让我注意到,我还没有看到Delphi代码中鼠标滚轮的任何真正明确的用途——当所有的鼠标现在都有滚轮,Delphi再次处于“前沿”时,这太可怕了!我本来希望有一个属性、一个组件或其他更“暴露”的解决方案,那么Fire猴轮支架呢


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

在XE2(以及所有最新版本)中,您不需要做任何事情。标准控件支持鼠标滚轮滚动出框。只要去掉这个旧代码。

具有Windows句柄的Delphi组件(TWinControl的后代)具有
OnMouseWheel
OnMouseWheelUp
OnMouseWheelDown
事件


如果要将鼠标滚轮事件添加到不从TWinControl下降的控件,请参阅本文:

Ah我明白了。谢谢,我把滚动选择和滚动背景混淆了。我在一个空白项目中尝试了TListBox,它似乎不支持鼠标滚轮,但如果您溢出显示的项目并获得一个滚动条,我会看到它支持鼠标滚轮。