现在的位置: 首页 > 综合 > 正文

在Win32 Delphi 模拟多播事件

2013年09月14日 ⁄ 综合 ⁄ 共 3393字 ⁄ 字号 评论关闭

原文地址:http://delphi.about.com/library/weekly/aa051005a.htm

    

   在Win32 Delphi OOP中,通常一个组件的事件句柄只能关联一个方法。而在Delphi的.Net版本,多个事件处理代码能够被绑定到一个相同的事件上面。这篇文件将为你介绍一个在Win32 Delphi 模拟多播事件的方法。

 

当你用Delphi开发应用(32位)程序的时候,你总是要写一些代码去处理组件的事件。比如说,你拖一个按钮在一个窗体上,然后双击这个按钮,一个空的事件句柄将被创建,也就是你将要写代码接收用户单击动作的地方。

Win32 Delphi仅仅允许你用一个方法作为一个组件的某个事件的处理代码。

 

Delphi的.Net版本开始引入多播事件的概念。开发人员能够关联两个或者多个方法到某个事件,而且在事件触发的时候可以被全部的调用。

 

让我看下如何构建一个Win32 Delphi对象来维持一个它的事件方法列表-由此来模拟多播事件的处理。

在开始之前,我强烈建议你再次熟悉下有的Delphi OOP自定义组件开发的印象。

 

Win32 Delphi 一个简单的多播事件处理的例子

首先,我们将定义一个简单类(TMultiEventClass)和唯一的一个TMutliEvent事件类型。我们将用一个fMultiEventHandlers TList对象来存储一个在事件触发时将被调用的所有方法的列表。这个 Delphi的TList类被设计用来作为一种数组方式存储机制对于指针类型数据。

在设计中,Delphi的每个方法(函数或者过程)都可以用一个TMethod类型来代表。比如说,一个TMethod类型能够用来执行一个方法仅仅通过它的名字

 

上面的代码是TMultiEventClass类的定义部分。fMultiEventHandlers作为一个私有列表用来存储将要处理的TMutliEvent事件类型方法指针。由于这个类允许多个事件指针连接到一个事件上面 ,所以我们需要两个相关的过程来增加或者移除事件句柄:AddMultiEvent 和 RemoveMultiEvent。

 

下面的代码是实现部分:

 

在上面的代码中,FireMultiEvent过程是被用来模仿产生一个事件。在正常的情况下这应该是TMultiEventClass类的一个私有方法,被初始化在其内部。

 

为了更好的理解上面的代码,我们将用一个简答的Demo来说明问题。拖一个按钮到窗体上,并且放接下来的代码到OnClick事件中:

 

建立一个test对象,首先,用AddMultiEvent方法增加对Handler1和Handler2的引用,然后用RemoveMultiEvnet过程移除对于Handler1的引用,然后Handler3被增加到事件句柄列表中,最后FireMultiEvent过程被执行。

 

这三个方法的定义是这样的:

 

 

当运行程序的时候什么将会发生呢?那个方法将被FireMultiEvent调用?答案是“Handler2"和”Handler2"。

 

OK,就这样。在Win32 Delphi中的多播事件!如果你不相信我的话,你可以自行下载上面的演示代码并执行下。有问题或者什么想说的?我想你已经知道的:Delphi程序论坛

 

注:相关搜索“在(Win32)Delphi 模拟类属性”?

抱歉!评论已关闭.