📄 m48.htm
字号:
<br>
Public Sub SetMsg(msg As VbMsg)<br>
<br>
If msg.iType >= minMsg And msg.iType <= maxMsg Then<br>
<br>
RaiseEvent RecMsg(msg)<br>
<br>
End If<br>
<br>
End Sub<br>
<br>
'<br>
<br>
' 根 据ID, 返 回 对 象 的 关 键 字,<br>
<br>
只 应 由 消 息 服 务 器(MsgServer) 调 用<br>
<br>
Public Property Get Key() As String<br>
<br>
Key = "ID:" & ID<br>
<br>
End Property<br>
<br>
类 模 块 之 三:Global.bas 本 模 块 声 明 了 两 个 全 局 变 量, 一 个 是 接 收 器(MsgClient)
列 表(Clients), 一 个 是 接 收 器 计 数 器, 以 为 每 个 接 收 器 分 配 一 个 唯 一 的ID 标 志。 把
变 量 放 在 单 独 的 模 块 中, 是 为 了 实 现 数 据 在 进 程 间 的 共 享, 是 跨 进 程 间 消 息 传 递 的
关 键 所 在。( 应 保 证 在 编 译 时 工 程 是 单 限 程 的, 否 则 数 据 共 享 则 不 能 实 现。)。 <br>
Attribute VB_Name = "modGlobal"<br>
<br>
Option Explicit<br>
<br>
<br>
<br>
' ---<br>
<br>
' 说 明:<br>
<br>
'<br>
<br>
' 消 息 服 务 器 全 局 变 量<br>
<br>
' ---<br>
<br>
' 消 息 接 收 客 户 列 表<br>
<br>
Public Clients As New Collection<br>
<br>
<br>
<br>
' 消 息 接 收 客 户ID 计 数 器<br>
<br>
Public CliCount As Long<br>
<br>
类 模 块 之 四:MsgSrv.cls 本 模 块 中 定 义 了 消 息 服 务 器 类MsgServer, 该 类 是 消 息
广 播 引 擎 的 主 体, 它 主 要 管 理 维 护 消 息 接 收 器 列 表(Clients), 将 发 送 来 的 消 息( 调
用SendMsg 过 程) 依 次 发 送 给 列 表 中 的 所 有 接 收 器。 注 意, 这 个 类 被 声 明 为 公 共 全 局
类, 这 主 要 是 为 了 方 便 使 用( 不 必 在 每 个 程 序 中 再 建 立 该 类, 过 程 名 全 局 有 效)。 <br>
VERSION 1.0 CLASS<br>
<br>
BEGIN<br>
<br>
MultiUse = -1 'True<br>
<br>
END<br>
<br>
Attribute VB_Name = "MsgServer"<br>
<br>
Attribute VB_GlobalNameSpace = True<br>
<br>
Attribute VB_Creatable = True<br>
<br>
Attribute VB_PredeclaredId = False<br>
<br>
Attribute VB_Exposed = True<br>
<br>
Option Explicit<br>
<br>
<br>
<br>
' ---<br>
<br>
' 说 明:<br>
<br>
'<br>
<br>
' 消 息 服 务 器 类<br>
<br>
' ---<br>
<br>
' 发 送 消 息<br>
<br>
Public Sub SendMsg(msg As VbMsg)<br>
<br>
Dim c As MsgClient<br>
<br>
For Each c In Clients<br>
<br>
c.SetMsg msg<br>
<br>
DoEvents<br>
<br>
Next c<br>
<br>
End Sub<br>
<br>
'<br>
<br>
' 增 删 消 息 接 收 客 户<br>
<br>
Public Sub AddMsgClient(c As MsgClient)<br>
<br>
CliCount = CliCount + 1<br>
<br>
c.Id = CliCount<br>
<br>
Clients.Add c, c.Key<br>
<br>
End Sub<br>
<br>
Public Sub DelMsgClient(c As MsgClient)<br>
<br>
Clients.Remove c.Key<br>
<br>
If Clients.Count = 0 Then CliCount = 0<br>
<br>
End Sub<br>
<br>
到 这 里, 一 个 小 巧 灵 活 的 消 息 广 播 引 擎 就 完 成 了, 它 的 使 用 范 围 很 广, 用 起 来 也
很 方 便, 只 需 在 工 程 中 引 入 编 译 过 的ActiveX 部 件, 就 可 以 直 接 调 用SendMsg 发 送 消
息, 可 能 在 安 装 消 息 接 收 器(MsgClient) 时 会 稍 许 有 点 麻 烦, 下 面 举 一 个 简 单 的 应 用
例 子 大 致 说 明 一 下: 在 设 计Windows 程 序 时, 往 往 会 感 觉 到 程 序 的 实 际 运 行 过 程
与 你 想 象 的 相 差 甚 远, 调 试 时 就 非 常 希 望 看 到 程 序 运 行 时 后 台 的 一 些 情 况。 利 用 V
B 的 单 步 执 行 或Debug 命 令, 都 会 受 到 一 些 限 制。 利 用 消 息 广 播 引 擎, 制 作 一 个 通 用
的 实 时 消 息 事 件 查 看 程 序, 就 可 以 很 好 地 解 决 这 一 问 题。 查 看 程 序 的 主 要 工 作 就 是
捕 捉 一 组 事 先 定 义 好 的 消 息 事 件, 并 将 消 息 的 内 容 显 示 在 列 表 框 内, 可 以 只 用 一 个
窗 体 完 成, 大 体 样 子 如 下: <br>
Const MsgInfoID=101<br>
<br>
Private WithEvents mClient As MsgClient<br>
<br>
<br>
<br>
Private Sub Form_Load()<br>
<br>
Set mClient = New MsgClient<br>
<br>
MClient.minMsg= MsgInfoID<br>
<br>
MClient.maxMsg= MsgInfoID<br>
<br>
AddMsgClient mClient<br>
<br>
End Sub<br>
<br>
<br>
<br>
Private Sub Form_Unload(Cancel As Integer)<br>
<br>
DelMsgClient mClient<br>
<br>
End Sub<br>
<br>
<br>
<br>
Private Sub mClient _RecMsg(ByVal msg As VbMsgSrv.VbMsg)<br>
<br>
List1.AddItem msg.iTimeStr & Chr(9) & msg.iName & Chr(9) &
msg.iDescription<br>
<br>
End Sub<br>
<br>
在 被 调 试 的 程 序 中, 为 了 调 用 方 便, 可 以 编 写 一 个 全 局 过 程, 象 下 面 这 个 样 子: <br>
Const MsgInfoID=101<br>
<br>
Public Sub MsgInfo(iName As String,iDes As String)<br>
<br>
Dim msg As New MsgClient<br>
<br>
With msg<br>
<br>
.iName = iName<br>
<br>
. iDescription = iDes<br>
<br>
End With<br>
<br>
SendMsg msg<br>
<br>
End Sub<br>
<br>
在 程 序 的 重 点 需 要 了 解 的 环 节 插 入MsgInfo 过 程, 运 行 时 信 息 就 会 在 事 件 查 看 程
序 的 窗 口 中 被 显 示 出 来。 这 种 方 法 尤 其 适 合 调 试 多 程 序 协 作 的 软 件 系 统。 当 软 件 系
统 正 式 交 给 用 户 时, 插 入 的MsgInfo 过 程 也 不 一 定 要 全 部 删 掉, 只 要 将 实 时 查 看 变 为
写 入 日 志 文 件, 这 些 运 行 时 的 信 息 也 是 日 后 软 件 维 护 的 第 一 手 资 料。 作 者: 于 琬
玲 <br>
工 作 单 位: ( 同 创 集 团) 济 南 同 创 系 统 工 程 中 心 <br>
通 信 地 址: 济 南 花 园4 小 区11-2-201 <br>
邮 政 编 码: 250100 <br>
E-mail: wangfei@public.jn.sd.cn <br>
电 话: 0531-6942522( 公 司),0531-8019501( 宅) </span></font>
<p align="left"> <br>
</table>
</div>
<p align="center"><a href="../../pian/vb.htm">回首页</a>
<p align="center"><script src="../../2.js"></script></a>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -