最近做一个组件Compont,需要获取控件的事件并进行处理,
在delphi中,一个控件的处理函数设置好之后,它原来的处理函数就失效了,我想实现的机制
是如C#中的事件代理一样,
一个+=就可以实现对一个事件添加多个处理函数,但delphi中并没有这样的机制,不过还是有办
法解决的:
比如我在窗体中定义了一个按钮button1,它的默认OnClick处理函数为Button1Click(Sender :
Tobject);我要为它的OnClick事件添加一个处理函数,并且不影响这个Button1Click函数的执行
。
首先,声明一个与事件类型相同的对象A。
然后,对将这个对象A赋值为原有的处理函数B
将原有的处理函数B赋值为新的处理函数C
在C函数中,使用if Assigned(A) then A(Sender);即可。
比如Button的Onclick事件,类型为TNotifyEvent,可以这样:
tmpButtonClick : TNotifyEvent;
procedure NewButtonOnClick(Sender:Tobject);
在FormShow事件中:
tmpButtonClick := Button1.OnClick;
Button1.OnClick := NewButtonOnClick;
在NewButtonOnClick中执行完所需功能之后:
if Assigned(tmpButtonClick) then
tmpButtonClick(Sender);
分享到:
相关推荐
在 Delphi 编程环境中,动态绑定事件处理函数是一个强大的特性,它允许程序在运行时动态地连接事件和对应的处理函数,而不是在编译时静态地确定。这为开发提供了更大的灵活性,特别是在处理不确定数量的对象或者需要...
下面将详细探讨Delphi事件赋值操作的相关知识点。 1. **事件声明**: 在Delphi中,事件通常作为类的成员声明,其语法如下: ```delphi type TMyClass = class strict private FOnSomeEvent: TNotifyEvent; //...
例如,可以添加`OnWM_PAINT`事件处理程序来响应`WM_PAINT`消息,这通常用于刷新窗口内容。 5. **消息屏蔽(Message Filtering)**:有时候,我们需要阻止某些消息的处理,这可以通过消息过滤器实现。在Delphi中,...
在本文中,我们将深入探讨如何使用Delphi这个强大的RAD(快速应用开发)工具来处理Android系统的广播事件,特别是静态注册广播接收器的方式。 首先,我们要了解广播接收器(BroadcastReceiver)。在Delphi中,广播...
本文将详细介绍如何在 Delphi 中设置一个事件拥有多个事件处理者。 首先,我们需要了解 Delphi 中事件的基本结构。例如,假设有一个名为 `TMyNotifyEvent` 的事件类型,它是一个对象方法,接收 `Sender` 和 `Test` ...
**Delphi图像处理单元**是基于Delphi编程环境中用于图像操作和处理的组件或库。这个单元集成了GDI+(Graphics Device Interface Plus)技术,提供了丰富的图像处理功能,包括但不限于图像加载、显示、保存、裁剪、...
三、Delphi 事件处理 1. OnClick 事件:OnClick 事件是 Delphi 中最常用的事件之一,用于响应控件的单击事件。 2. OnChange 事件:OnChange 事件是 Delphi 中的另一个常用事件,用于响应控件的变化事件。 3. ...
- 使用DELPHI事件处理机制,响应用户的操作,如点击事件、拖拽事件等。 总的来说,这个实例集为DELPHI开发者提供了一个全面的学习资源,通过实际操作和修改代码,能深入理解MapX在GIS应用开发中的各种技术和技巧,...
7. **Delphi事件处理**:虽然钩子函数是C语言的原型,但Delphi允许你通过事件处理机制来封装这个函数,使得代码更易于理解和维护。 8. **权限和安全**:使用键盘钩子需要特定的权限,并且可能引发安全问题,因为这...
- `TForm1`是主窗体类,其中包含了两个事件处理函数:`DBGrid1MouseMove` 和 `DBGrid1DrawColumnCell`。 - `DBGrid1` 是一个数据网格控件,用于显示数据库记录。 2. **事件处理函数**: - `DBGrid1MouseMove`:...
1. **声明事件处理程序**:在Delphi中,事件处理程序是类中的公开方法,通常与特定的事件类型关联。例如,`TButton`组件的`OnClick`事件处理程序可能是这样的: ```pascal procedure TForm1.Button1Click(Sender: ...
在本篇文章中,我们将深入探讨如何在 DELPHI 中为动态创建的控件添加事件处理程序的方法。通过本文,读者可以了解到如何定义事件处理器、如何将事件处理器与控件关联起来,以及如何确保这些控件能够正确响应用户或...
例如,当用户拖放文件时,软件会触发相应的OnDropFiles事件,并在此事件处理函数中解析拖放的文件路径,然后调用适当的函数来打开文件。同时,为了保证程序的稳定性,开发者需要正确处理可能出现的异常情况,如文件...
- `OnMouseWheel`事件处理鼠标滚轮操作,提供了WheelDelta参数来判断滚动方向和数量。 - `OnMouseWheelDown`和`OnMouseWheelUp`则分别对应向下和向上滚动。 6. **鼠标捕获** - `Capture`属性可以用来设置或释放...
通过阅读和分析源码,你可以理解如何将WMI查询和Delphi事件处理机制结合起来,实现一个实时监控网络状态的应用。 6. **实际应用** 这样的功能在很多场景下都有用处,比如服务器监控、远程办公自动化、网络故障报警...
3. Delphi事件处理:Delphi中的事件处理通常是通过事件响应函数实现的。例如,`FormCreate`事件会在窗口创建时触发,`FormDestroy`事件则在窗口关闭时触发。`Button1Click`事件是在按钮被点击时触发的,可以用来响应...
在本文中,我们将深入探讨Delphi中的事件赋值机制,包括事件的定义、事件处理函数、事件的触发以及如何在不同组件之间传递事件。 首先,我们需要了解什么是事件。在Delphi中,事件是一种特殊的类型,它代表了对象...
PNG Delphi 是一款专为 Delphi 开发者设计的组件,用于处理PNG(Portable Network Graphics)图像格式。PNG 是一种无损压缩的位图格式,广泛应用于网页设计、图形编程和软件开发中,因为它提供了高质量的透明度支持...
这涉及到对Delphi事件处理机制的深入理解,以及如何模拟用户操作的技术。 5. **时间同步**:为了确保回放的准确性和可比性,可能需要考虑时间同步问题。例如,如果原始操作的速度与回放速度不同,可能需要调整回放...
首先,我们需要了解Delphi中处理鼠标滚轮事件的基本原理。在Windows系统下,鼠标滚轮会产生WM_MOUSEWHEEL消息,Delphi可以通过消息处理机制来捕获并处理这个消息。在Delphi中,我们通常会重写控件的WndProc方法来...