delphi - 如果鼠标不在 VirtualTreeView (TVirtualStringTree) 上,如何禁用 MouseWheel

标签 delphi delphi-2010 c++builder virtualtreeview c++builder-2010

如果获得焦点,TVirtualStringTree 的默认行为是 - 即使鼠标未经过控制(除非它位于另一个 TVirtualStringTree 上方),它也会在鼠标滚轮上滚动。

有没有一种快速而优雅的方法来禁用此行为?

我已经使用 OnMouseWheel 事件执行此操作,并使用 PtInRect 检查 Mouse.CursorPos 是否在控件上,但我有一种感觉有一种更好的方法可以做到这一点,因为这样我必须为添加的每个 TreeView 定义一个新事件,并处理何时聚焦/取消聚焦控件,所以我希望必须有更好的方法来禁用它。

所以要明确的是,我希望鼠标滚轮功能照常工作,但仅当鼠标位于 VirtualTreeView 上时才有效。

最佳答案

将 TApplicationEvents 控件下拉到表单

在 TApplicationEvents onMessage

 procedure TForm5.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
 var
  pnt: TPoint;
  ctrl: TWinControl;
 begin
  if Msg.message = WM_MOUSEWHEEL then
  begin
    if not GetCursorPos(pnt) then Exit;
    ctrl := FindVCLWindow(pnt);
    if Assigned(ctrl) then
      Msg.hwnd := ctrl.Handle;
  end;
 end;

关于delphi - 如果鼠标不在 VirtualTreeView (TVirtualStringTree) 上,如何禁用 MouseWheel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8350984/

相关文章:

delphi - 如何使用 Delphi XSD 数据绑定(bind)向导创建 "New"函数

delphi - 防止 Delphi 10.2 自动向 TForm 添加属性

delphi - 如何在Delphi 2010中安装TWebBrowser

delphi - 无法使用 UTF-8 编码

c++ - 更改静态库的 "Dynamic RTL"设置有什么影响?

delphi - 如何将 Indy UTF-8 响应转换为 native Delphi (Unicode) 字符串?

delphi - 如何旋转 TPathData(矢量路径)?

c - 一个C代码的Delphi等效代码

c++ - 在 Codegear CBuilder 2007 Forms 中捕获异常

delphi - 用于识别 C++ Builder 个性的条件指令