将 OnMouseDown 事件处理程序添加到 VCL 组件?

Adding OnMouseDown event-handler to VCL component?

在 Delphi 10.4.2 32 位 VCL 应用程序中,我使用来自 GetIt PackageManager 的 SVGIconImageList 库的组件 TSVGIconImage

尽管该组件支持 OnDblClick 事件处理程序,但它不支持 OnMouseDown 事件处理程序!即,我可以通过双击对象检查器中的 OnMouseDown 事件来添加一个 OnMouseDown 事件处理程序,但是该事件处理程序从未在 运行 时间被调用:

procedure TformMain.SVGIconImage1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  CodeSite.Send('called!'); // never called!
end;

TSVGIconImage 组件在 SVGIconImage.pas 中声明为:

TSVGIconImage = class(TCustomControl)

所以 TSVGIconImage 组件不应该从 TCustomControl 继承它的 OnMouseDown 事件吗?

无论如何,如何在我的应用程序代码中为 TSVGIconImage 添加有效的 OnMouseDown 事件?

编辑:在单独的 VCL 应用程序中测试后,我发现 TSVGIconImage OnMouseDown 事件处理程序在 运行 时在那里工作。所以它一定是其他东西阻止了我的应用程序中的 TSVGIconImage OnMouseDown 事件处理程序。我还要查明原因。

A) 在您的表单上放置一个 TApplicationEvents 组件。

B) 双击对象检查器中的 ApplicationEvents.OnMessage 事件创建一个 OnMessage 事件处理程序并为 WM_LBUTTONDOWN:

编写一个 case-filter
procedure TForm1.AppEvents1Message(var Msg: tagMSG; var Handled: Boolean);
begin
  case Msg.message of
    WM_LBUTTONDOWN:
      begin
        if Msg.hwnd = SVGIconImag1.Handle then
          DoSomething;
      end;
  end;
end;

感谢@AndreasRejbrand 和@fpiette 的建设性和有益的输入!