当前位置: 首页 > 知识库问答 >
问题:

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

施晗昱
2023-03-14

在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=类(TCustomControl)

那么tsvgiconimage组件难道不应该从tCustomControl继承它的onmousedown事件吗?

无论如何,如何在应用程序的代码中为TSVGIConImage添加工作的OnMousedown事件?

编辑:在一个单独的VCL应用程序中测试后,我发现tsvgiconimageOnMouseDown事件处理程序在运行时工作。所以一定是其他东西阻止了应用程序中的tsvgiconimageOnMouseDown事件处理程序。我还得找出原因。

共有1个答案

鄢子平
2023-03-14

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提供的建设性和有益的投入!

 类似资料:
  • 问题内容: 我想使用获取ID为参数的处理程序来处理事件。 我可以通过JavaScript如下添加事件处理程序,并且可以正常运行: 但是在这种情况下,我无法将参数传递给。我试图打印的,但没有结果。 HTML属性根本不起作用,不调用处理程序。 问题答案: 您可以使用闭包来传递参数: 但是,我建议您使用更好的方法来访问框架(我只能假设您使用的是DOM0方式,即按其名称访问框架窗口-只是为了向后兼容而保留

  • 问题内容: 我想将一个事件处理程序添加到一个段落中,以供任何用户单击它时使用。例如,我有一个段落,当用户单击它时会显示一个警报,但是在HTML上不使用“ onclick”。 问题答案: 您可以添加事件侦听器。 嗯 像这样: 完整代码(已在Chrome&IE7中测试):

  • 我是javafx新手,目前正在做菜单,menuitems。我希望覆盖显示上下文菜单的默认事件,即使菜单没有被按下,但鼠标悬停在它上面,而相邻菜单的上下文菜单显示时,当前仍会显示。这发生在每个应用程序中,因为它非常方便。但由于某种原因,我不需要它。我试图捕获菜单上的鼠标事件,这样我就可以相应地工作,但什么也没发生。 这里是我想要添加此行为的菜单。

  • 问题内容: 我是一位经验丰富的Java程序员,但是大约十年来第一次接触JavaScript / HTML5。我完全困惑于应该是有史以来最简单的事情。 作为示例,我只想绘制一些东西并为其添加事件处理程序。我确定我在做一些愚蠢的事情,但是我搜索了所有内容,没有任何建议(例如,此问题的答案: 添加onclick属性以使用JavaScript输入。我正在使用Firefox10.0.1。我的代码如下。您会看

  • 事件就是用户或浏览器自身执行的某种动作。诸如click、load 和mouseover,都是事件的名字。而响应某个事件的函数就叫做事件处理程序(或事件侦听器)。事件处理程序的名字以"on"开头,因此click 事件的事件处理程序就是onclick,load 事件的事件处理程序就是onload。为事件指定处理程序的方式有好几种。 13.2.1 HTML事件处理程序某个元素支持的每种事件,都可以使用一

  • 问题内容: 是否可以使用jQuery确定元素是否具有单击处理程序,更改处理程序或绑定到其的任何类型的事件处理程序? 此外,是否可以确定给定类型的事件有多少个单击处理程序(或任何类型的事件处理程序),以及事件处理程序中包含哪些功能? 问题答案: 您可以从数据缓存中获取此信息。 例如,将它们记录到控制台(firebug,即ie8): 或迭代它们: