为了打破上面的几点局限性,就必须寻找新的解决办法。非常庆幸的是,VB5.0企业版的推出,给VB增添了许多强有力的特性,有几点特性,正好可以帮助我们解决难题。先让我介绍一下这几个特性:
1.用户自定义事件:在类模块中,可以使用Event关键字来定义用户自定义事件,使用RaiseEvent语句来产生该事件,这一机制给处理随机事件带来极大的方便。上面说的消息广播引擎,就可以不再使用Timer控件做支持,而是当收到需要广播的消息时,产生一个预定义的事件,而需要处理消息的客体对象,只需截获该事件,就完成了消息的传递。
2.ActiveX EXE部件:利用VB,可以方便地将共享代码封装在ActiveX部件之中。将消息广播引擎实现于一个ActiveX部件之中,不仅方便了在程序中使用,而且更为重要的一点是,可以实现跨进程间的消息传递。因为ActiveX部件有内部(DLL)外部(EXE)两种,对于外部部件,可以对模块内的全局数据实现共享(关于ActiveX两种代码部件的区别,请阅读VB的联机帮助文件)。
3.远程自动化连接:ActiveX部件,是一种标准的客户机/服务器结构,利用Windows平台的COM模型,VB已能方便地将这种结构扩展到整个网络的范围。所以,我们的消息广播设计,在实现了进程间的消息传递之后,进而实现网络上的消息传递,也成为可能。
通过上面的几点介绍,这一方式的设计思想也就比较清楚了,在具体设计时,我通过四个模块之间的相互协作,完成了消息的发送、广播及接收,并将这四个模块封装在一个ActiveXEXE部件之中。下面就是这三个类模块的简单介绍及源代码:
类模块之一:Msg.cls----在该模块中,定义了消息数据结构VbMsg类,它是消息传递中的载体。这里只是一个简单的例子,如果想实现更多的功能,如建立两点间的数据通道,而不是单纯的广播消息,则可能需要对该结构进行一些扩充。
VERSION 1.0 CLASS BEGIN MultiUse = -1 'True END Attribute VB_Name = "VbMsg" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = True Attribute VB_PredeclaredId = False Attribute VB_Exposed = True Option Explicit ' 说 明: ' 消 息 类: 定 义 全 局 的 消 息 结 构 Public iType As Long ' 消 息 类 型 编 号 Public iName As String ' 消 息 名 Public iSource As String ' 消 息 源 说 明 Public iDescription As String ' 消 息 说 明 Dim iT As Date ' 消 息 发 生 时 间 ' 返 回 日 期 型 时 间 Public Property Get iTime() As Date iTime = iT End Property ' 返 回 字 符 型 时 间 Public Property Get iTimeStr() As String iTimeStr = Format(iT, "yyyy.mm.dd hh:mm:ss") End Property ' 在 对 象 被 建 立 时, 设 置 消 息 发 生 时 间 Private Sub Class_Initialize() iT = Now() End Sub |
正在阅读:在VB程序中处理随机事件在VB程序中处理随机事件
2005-06-10 10:20
出处:
责任编辑:moningfeng
键盘也能翻页,试试“← →”键