将 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 的建设性和有益的输入!
在 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
:
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 的建设性和有益的输入!