第 五 章 创 建 A c tiv e X 控 件
C+
- Bu ild e r 3 的 一 个 显 著 特 点 就 是 A c tiv e X 技 术 要 把 A c tiv e X 讲 清 楚 恐 怕 不是 一 件 很 容 易 的 事 情 您 可 以 初 步 把 它 理 解 为 消 肿 了 的 OC X 尤 其 适 合 于在 In te rn e t上 传 输 第 三 章 介 绍 了 C+ + Bu ild e r 3 的 A c tiv e X 框 架 下 面 就 具 体介 绍 怎 样 用 C+ + Bu ild e r 3 创 建 A c tiv e X 控 件 A c tiv e F o rm 以 及 怎 样 在 W e b 上发 布 A c tiv e X 控 件 和 A c tiv e F o rm
1 创 建 和 使 用 Ac ti ve X 控 件
运 用 C+ + Bu ild e r 3 的 A c tiv e X 框 架 创 建 A c tiv e X 控 件 实 际 上 就 是 把 已 有 的 基于 T W in C on tro l的 控 件 转 换 为 A c tiv e X 控 件 如 果 是 基 于 T G ra ph ic C on tro l的 控件 一 般 不 能 直 接 转 换 您 必 须 先 改 写 该 控 件 把 它 的 基 类 改 为T C us to m C on tro l 因 为 T C us to m C on tro l兼 具 T W in C on tro l和 T G ra ph ic C on tro l的特 征 然 后 把 它 重 新 安 装 到 元 件 选 项 板 上
C+
- Bu ild e r 3 为 创 建 A c tiv e X 控 件 提 供 了 向 导 使 用 F ile 菜 单 上 的 N e w
命 令 打 开 N e w I te m s 对 话 框 ( 实 际 上 就 是 C+ + Bu ild e r 3 的 对 象 库 ) 翻 到
A c tiv e X 页 双 击 A c tiv e X C o n tro l 图 标 打 开 A c tiv e X 控 件 向 导 如 图
5 .1 所 示
图 |
5 .1 |
A c tive X 控 件 向 导 |
||||||
---|---|---|---|---|---|---|---|---|
在 |
VC L |
C la s s |
N a m e |
框 |
内 选 |
择 元 件 选 项 板 上 的 |
一 个 VC L 控 件 |
这 里 以 |
TB u t to n 为 例 以 便 读 者 与 前 面 介 绍 的 Ty p e L ib r a r y 编 辑 器 对 照 C+ + Bu ild e r 3 根 据 您 所 选 的 VC L 控 件 自 动 生 成 A c tiv e X 控 件 的 名 称 和 实 现 接 口 的 单 元 的名 称
A c tiv e X 控 件 的 名 称 在 N e w A c tiv e X N a m e 框 内 显 示 通 常 最 后 一 个 字 母为 大 写 的 X 这 里 是 B u tto n X A c tiv e X 控 件 的 实 现 单 元 名 称 在 Im p le m e n ta t ion
U n it |
框 内 显 示 |
这 里 是 B u tto n Im p l1 .C P P |
P ro ject N a m e |
框 是 此 A c tiv e X |
---|---|---|---|---|
控 件 |
的 项 目 名 称 |
这 里 是 B u tto nX C on tro l1 |
最 后 编 译 此 项 目 |
得 到 的 .O C X 文 |
件 就 是 B u tto nX C on tro l1 . O C X
在 |
A c tiv e X |
C o n tro l |
O p tio n s |
框 内 有 三 个 复 选 框 如 果 选 中 In c lu d e |
---|---|---|---|---|
D e s i |
gn- T im e |
L ic e ns e |
复 选 框 |
表 示 在 建 立 此 A c tiv e X 控 件 时 将 加 上 许 可 文 |
件 许 可 文 件 的 扩 展 名 是 .L IC 文 件 名 就 是 项 目 名 在 这 里 就 是B u tto nX C on tro l1 . L IC 除 非 用 户 拥 有 此 许 可 文 件 的 合 法 拷 贝 否 则 用 户只 能 作 为 最 终 用 户 使 用 它 无 法 在 开 发 环 境 中 打 开 它
如 果 一 个 A c tiv e X 项 目 中 有 几 个 A c tiv e X 控 件 并 且 这 几 个 A c tiv e X 控 件 都 选中 了 In clu d e D e s ig n - T im e L icen ce 复 选 框 那 么 许 可 文 件 仍 然 只 有 一个 但 每 个 A c tiv e X 控 件 在 许 可 文 件 中 都 有 专 门 的 一 个 入 口
如 果 选 中 In c lu d e V e r s io n In fo rm a tio n 复 选 框 表 示 要 在 A c t iv e X 控 件 中 包含 版 本 信 息 要 给 A c tiv e X 控 件 加 上 版 本 信 息 使 用 P ro ject 菜 单 上 的
O p tions 命 令 翻 到 V e rs ionInfo 页 如 图 5 .2 所 示
图 5 .2 给 A c tiv e X 控 件 加 上 版 本 信 息
如 果 选 中 In c lu d e A bout B o x 复 选 框 表 示 A c tiv e X 控 件 中 将 包 含 A bou t框A bout框 实 际 上 就 是 一 个 Fo rm Fo rm 上 默 认 的 内 容 有 A c t iv e X 控 件 的 名 称
A c tiv e X 控 件 的 图 标 版 权 信 息 以 及 一 个 OK 按 钮 如 图 5 .3 所 示 您 可 以 自定 义 A bou t框 上 的 内 容
图 5 .3 A bout 框
上 述 选 项 设 置 好 以 后 单 击 OK 按 钮 A c tiv e X 控 件 向 导 可 能 会 显 示 这 样 的 对话 框
图 5 .4 一 个 警 告 信 息
这 个 警 告 的 意 思 是 您 必 须 先 建 立 一 个 A c tiv e X 项 目 然 后 才 能 创 建 A c tiv e X 控 件 好 在 A c tiv e X 控 件 向 导 简 化 了 有 关 工 作 您 只 需 单 击 OK 按 钮 就 可 以 了当 然 您 也 可 以 事 先 在 对 象 库 中 双 击 A c tiv eX L ib rary 图 标 建 立 一 个 A c t iv e X 项 目 然 后 再 用 A c tiv e X 控 件 向 导 创 建 A c tiv e X 控 件 此 时 不 会 出 现 图 5 .4 所示 的 警 告 框
您 还 可 以 把 多 个 A c tiv e X 控 件 或 A c tiv e F o rm 加 到 同 一 个 A c tiv e X 项 目 中
- 2 向 导 创 建 了 哪 些 文 件
如 果 打 开 资 源 管 理 器 的 话 您 就 会 发 现 A c tiv e X 控 件 向 导 主 要 生 成 了 下 列 文件
-
A c
tiv e X 项 目 文 件 B u tto nX C on tro l 1 . C P P
-
类 型
库 文 件 B u tto nX C on tro l1 . T L B
-
A c
tiv e X 控 件 中 的 接 口 实 现 单 元 文 件 B u tto n Im p l 1 .C P P
-
类 型
库 的 接 口 源 文 件 B u tto nX C on tro l1_T L B . C P P
-
A bou
t框 的 源 文 件 ( 可 选 ) A bou t1 .C P P
-
A bou
t框 的 Fo rm 文 件 ( 可 选 ) A bou t1 .D F M
-
许 可
文 件 ( 可 选 ) B u tto nX C on tro l1 . L IC
-
A c
tiv e X 项 目 的 资 源 文 件 B u tto nX C on tro l1 . R E S
-
A c
tiv e X 项 目 的 AT L 文 件 B u t tonX C on tro l 1_A T L . C P P
其 中 AT L 是 M ic ros oft A c tive T e m p la te L ibra r y 的 简 称
项 目 文 件 是 A c tiv e X 项 目 向 导 自 动 生 成 并 维 护 的 一 般 不 要 手 工 修 改 它
类 型 库 文 件 B u tto nX C on tro l1 . T L B 是 个 二 进 制 文 件 只 能 用 T y p e L ib ra r y 编 辑 器 打 开 代 码 编 辑 器 能 打 开 的 是 类 型 库 的 接 口 源 文 件B u tto nX C on tro l1_T L B .C P P 这 个 文 件 是 类 型 库 的 C+ + 描 述 不 要 直 接 修 改它 因 为 它 是 由 T y p e L ib ra ry 编 辑 器 维 护 的 即 使 您 修 改 了 这 个 文 件刷 新 类 型 库 时 仍 会 忽 略 修 改
纯 粹 从 使 用 的 角 度 看 没 有 必 要 知 道 接 口 内 部 的 情 况 这 里 是 从 A c tiv e X 程序 员 的 角 度 看 看 B u tto nX C on tro l1 中 的 特 性 方 法 和 事 件 是 怎 样 实 现 的
为 了 节 省 篇 幅 这 里 选 取 了 有 代 表 性 的 部 分 代 码
S T DM E T HOD IM P T B u tto n X Im p l::_ s e t_ F o n t( IF o n t D is p * V a lu e ) / / 设 置 F ont
特 性
{
tr y
{
c o n s t D IS P ID d is p id = - 5 1 2 ;
if ( F ire O n R e q u e s t E d it( d isp id ) = = S _ F A L S E ) re tu rn S _ F A L S E ; S e tO le F o n t( m _ V c l C tl-> F o n t , V a lu e ) ;
F ire O n C h a n g e d ( d is p id ) ;
}
catch ( E x c ep t io n & e )
{
re tu rn E rro r( e .M e s s a g e .c _ s tr ( ) , I ID _ IB u t to n X );
}
re tu rn S _ OK;
};
S T D M E T H O D IM P T B u tto n X Im p l::g e t_ F o n t( IF o n t D isp * * V a lu e ) // 读 F on t特性
{
tr y
{
_ d i_ IFo n t D is p T e m p ;
G e tO le F o n t( m _ V c l C tl-> F o n t, T e m p ) ; T e m p -> A d d R e f ( ) ;
*V a lu e = T e m p ;
}
catch ( E x c ep t io n & e )
{
re tu rn E rro r( e .M e s s a g e .c _ s tr ( ) , I ID _ IB u t to n X );
}
re tu rn S _ OK;
};
S T D M E T H O D IM P T B u tto n X Im p l::A b o u t B o x ( ) //A bou t函数
{
tr y
{
S how B u t to nX A b o u t( ) ;
}
catch ( E x c ep t io n & e )
{
re tu rn E rro r( e .M e s s a g e .c _ s tr ( ) , I ID _ IB u t to n X );
}
re tu rn S _ OK;
};
至于 S how B u t to nX A bou t函数 则是 在 A b ou t框的源文 件中定义的
v o id Sh ow B u t to n X A b ou t( v o id )
{
T B u ttonX A b o u t* F o rm ;
F o rm = ne w T B u tto nX A b ou t( N U L L ) ; tr y
{
F o rm -> S h o w M o d a l( );
}
catch ( ...)
{
F o rm -> F re e ( ) ; re tu rn ;
}
F o rm -> F re e ( ) ;
}
S how B u tto n X A bou t函 数 的 作 用 是 创 建 T B u ttonX A bout 即 A bout 框 的 实 例 并作 为 模 式 对 话 框 显 示
编 辑 类 型 库
A c tiv e X 控 件 向 导 能 够 自 动 创 建 类 型 信 息 但 并 没 有 把 VC L 控 件 中 所 有 公 共的 ( P u b lic ) 和 公 开 的 ( P ub lis he d) 的 成 员 都 转 换 到 A c tiv e X 控 件 中 以B u tto nX C on tro l为 例 TB u t to n 元 件 中 的 许 多 特 性 如 H in t Ta b O rd e r 就 没 有 加到 B u tto nX C on tro l中 这 可 能 是 因 为 向 导 认 为 没 必 要 也 可 能 是 因 为 向 导 不知 道 怎 样 转 换
如 果 您 认 为 有 必 要 把 这 些 遗 漏 的 成 员 或 其 它 自 定 义 的 成 员 加 到 A c tiv e X 控 件中 可 以 使 用 V ie w 菜 单 上 的 T y pe L ibra r y 命 令 打 开 T y p e L ib ra r y 编 辑 器 如 图 5 .5 所 示
图 5 .5 Ty pe L ibra ry 编 辑 器
要 向 接 口 中 增 加 新 的 成 员 在 T y p e L ib r a ry 编 辑 器 中 选 择 IB u ttonX 节 点或 IB u ttonX E v e n t节 点 然 后 您 可 以 有 三 种 操 作 方 式
- 是
单 击 工 具 栏 上 的 P rope r ty 或 M e thod 图 标
二 是 在 上 述 两 个 节 点 上 单 击 鼠 标 右 键 在 弹 出 的 菜 单 中 选 择 N e w 再选 择 P rope r ty 或 M e thod
三 是 翻 到 Te x t 页 按 ID L 的 文 法 直 接 键 入 特 性 或 方 法 的 声 明
无 论 是 哪 种 方 式 操 作 好 后 最 好 单 击 工 具 栏 上 的 R e f re s h 图 标 刷 新 一 下类 型 库
创 建 特 性 页
特 性 页 非 常 类 似 于 一 个 对 话 框 主 要 用 于 让 A c tiv e X 控 件 的 用 户 在 设 计 期 修改 该 控 件 的 特 性 要 打 开 特 性 页 一 般 是 在 A c tiv e X 控 件 上 单 击 鼠 标 右 键在 弹 出 的 菜 单 中 选 择 P rope r tie s 命 令 例 如 TN M H TM L 控 件 的 特 性 页是 这 样 的
图 5 .6 一 个 A c tiv e X 控 件 的 特 性 页
下 面 还 是 以 B u tto nX C on tro l为 例 介 绍 创 建 特 性 页 的 一 般 步 骤
使 用 F ile 菜 单 上 的 N e w 命 令 翻 到 A c tiv e X 页 双 击 P rope r ty P a ge 图 标 向 导 将 创 建 一 个 空 白 的 特 性 页 P ro p e r ty P ag e1 一 个 对 应 的 单 元 文 件U n it1 代 码 如 下
/ /-
# inc lude < v c l . h > #pra g m a hd rs top
# in c lu d e < a tl\a tlv c l .h > # inc lude < in itg u id .h> # inc lude " U n it 1 .h "
/ /-
# p ra g m a p a c k ag e( s m art_ in i t) # p rag m a re so u rce "* . d fm "
T P ro p e r ty P ag e1 * P ro p e r ty P ag e1 ;
/ /-
_fa s tc a l l T P rope r ty P a g e 1 : : T P ro p e r ty Pa g e 1( C la s se s : : T C o m p o n e n t *C om po ne n t)
: T P ro p e r ty P ag e( C o m p on e n t)
{
//这是特性 页的构造函数
}
/ /-
vo id _ fa s tc a l l T P ro p e r ty P a g e 1 : :U p da te P ro p e r ty P a ge ( v o id)
{
//在这儿写 代码 从 A c tiv e X 控件中把特性 值读到特性页 上
}
/ /-
vo id _ fa s tc a l l T P ro p e r ty P a g e 1 : :U p da te O b je c t( vo id)
{
//在 这 儿 写 代 码 把 特 性 页 上 的 值 写 到 A c tiv e X 控 件 中
}
新 创 建 的 特 |
性 页 |
是 |
空 |
白 的 |
您 |
应 当 根 据 要 |
编 辑 的 特 性 把 合 适 的 VC L 控 |
件 |
加 |
---|---|---|---|---|---|---|---|---|---|
到 Fo rm 上 |
例 如 |
对 |
于 字 |
符 串 |
类 型 的 特 性 |
一 般 用 TEd i t元 件 来 编 辑 |
对 |
于 | |
字 符 串 列 表 |
类 型 |
的 |
特 |
性 |
一 般 |
用 TM e m o 元 |
件 来 编 辑 有 的 特 性 还 需 要 |
用 | 多 |
个 VC L 控 件 配 合 起 来 编 辑 特 性 页 上 一 般 放 四 个 按 钮 |
OK ( 确 定 ) C a n c e l( 取 消 ) | A pp ly ( 应 用 ) | H e lp ( 帮 |
---|---|---|---|
助 ) |
|||
特 性 页 往 往 做 成 多 页 结 构 |
这 样 如 果 A c tiv e X 控 件 | 的 特 性 比 较 多 | 通 过 适 |
当 的 分 类 就 显 得 有 条 理 性 也 能 避 免 特 性 页 在 屏 幕 上 占 的 空 间 太 大
特 性 页 上 的 每 一 个 VC L 控 件 旁 边 最 好 用 TLa b e l 做 一 个 标 注 否 则 用 户 就不 知 道 这 个 VC L 控 件 编 辑 的 是 什 么 特 性 标 注 的 文 字 最 好 就 是 要 编 辑 的 特性 名 称
当 然 仅 仅 在 VC L 控 件 旁 边 标 注 一 下 是 不 够 的 在 特 性 页 设 计 好 后 您 必须 把 A c tiv e X 控 件 的 特 性 与 特 性 页 上 的 VC L 控 件 联 系 起 来 这 就 要 在 特 性 页单 元 中 重 载 T P rope r ty P a g e 的 U pda te P rope r ty P a g e 和 U pda te O b je c t 其 中
U pda te P rope r ty P a g e 用 于 从 A c tiv e X 控 件 中 读 特 性 值 到 特 性 页 上 而
U pda te O b je c t正 相 反 用 于 把 特 性 页 上 的 值 写 到 A c tiv e X 控 件 中
下 面 以 B u t tonX C on tro l 为 例 介 绍 怎 样 重 载 U pda te O b je c t 和
U pda te P rope r ty P a g e 假 设 特 性 页 上 用 Ed it 1 编 辑 B u ttonX C on tro l 的 C a p tio n 特
性
/ /-
vo id _ fa s tc a l l T P ro p e r ty P a g e 1 : :U p da te P ro p e r ty P a ge ( v o id)
{
E d it1 -> T e x t = O le O b je c t-> C a p tio n
}
/ /-
vo id _ fa s tc a l l T P ro p e r ty P a g e 1 : :U p da te O b je c t( vo id)
{
O le O b je c t-> C a p tio n = E d it1 -> T e x t ;
}
有 的 读 者 可 能 对 O le O b je c t 比 较 陌 生 这 个 特 性 属 于 T P rope r ty P a g e 用 于 返回 特 性 页 所 编 辑 的 A c tiv e X 控 件 这 样 您 就 可 以 访 问 A c tiv e X 控 件 中 的 特 性 和方 法
最 后 要 把 特 性 页 与 A c tiv e X 控 件 联 系 起 来 这 就 要 在 A c tiv e X 控 件 的 实 现 单元 中 的 B E G IN _ P R O P E R T Y _ M AP 和 E ND _ P R O P E R T Y _ M AP 之 间 加 一 个P R OP _ P AGE 宏 并 且 传 递 特 性 页 的 GU ID 作 为 参 数 特 性 页 的 GU ID 是 由 C+ + B u ild e r 3 自 动 分 配 给 特 性 页 的 您 可 以 在 特 性 页 的 单 元 文 件 中 找 到 它 的GU ID 如 C la s s _ P ro p e r ty Pa g e 1 C la ss_ P ro p e r tyP a g e 2
B E G IN _ P R O P E R T Y _ M A P ( T A c t iv e F o rm X Im p l) P R O P _ P A G E (C L S ID _ P ro p e r ty P a g e 1 )
E ND _ P R O P E R T Y _ M A P ( )
其 中 C la ss_ P ro p e r tyP a g e 1 就 是 要 显 示 的 特 性 页 的 GU ID 如 果 一 个 A c tiv e X
控 件 有 几 个 特 性 页 就 要 分 别 加 入 几 个 宏 和 几 个 GU ID 例 如
B E G IN _ P R O P E R T Y _ M A P ( T A c t iv e F o rm X Im p l) P R O P _ P A G E (C L S ID _ P ro p e r ty P a g e 1 )
P R O P _ P A G E (C L S ID _ P ro p e r ty P a g e 2 ) E ND _ P R O P E R T Y _ M AP ( )
C+
- Bu ild e r 3 提 供 了 四 种 标 准 的 特 性 页 C la s s _ D C o lo r P ropP a g e C la s s _ D fon t P rop - P a g e C la s s _ D P ic tu re P ro p P a g e C la s s _ D S tr in gP ropP a g e 这 四 个 标 准 的 特 性 页 分 别 用 于 编 辑 颜 色 字 体 图 像 和 字 符 串 列 表
5 注 册 和 安 装 Ac ti ve X 控 件
A c tiv e X 控 件 只 有 在 注 册 后 才 能 被 使 用 要 注 册 A c tiv e X 控 件 使 用 Ru n 菜 单 上 的 R e g is ter A c tiv e X S e rv er 命 令 如 果 此 时 A c tiv e X 控 件 的 项 目 还没 有 编 译 或 需 要 重 新 编 译 就 先 编 译 此 A c tiv e X 项 目 该 命 令 实 际 上 是 调 用A c tiv e X 控 件 输 出 的 D llR e g is te r S e rv e r 函 数 这 个 函 数 是 在 A c t iv e X 控 件 的 项目 文 件 中 输 出 的
如 果 A c tiv e X 控 件 注 册 成 功 C+ + Bu ild e r 3 将 显 示 一 个 信 息 框 如 图 5 .7 所 示
图 5 .7 A c tive X 控 件 已 注 册 成 功
要 取 消 A c tiv e X 控 件 的 注 册 使 用 Ru n 菜 单 上 的 U n re g is te r A c t iv e X S e rv e r
命 令
要 在 C+ + Bu ild e r 3 的 ID E 中 使 用 A c tiv e X 控 件 还 要 把 A c tiv e X 控 件 安 装 到 元件 选 项 板 上 以 后 就 可 以 像 使 用 VC L 元 件 一 样 使 用 A c tiv e X 控 件 注 意 这里 所 说 的 A c tiv e X 控 件 已 不 限 于 用 C+ + Bu ild e r 3 创 建 的 A c tiv e X 控 件 也 可 以是 众 多 其 它 厂 家 创 建 的 A c tiv e X 控 件 由 于 A c tiv e X 控 件 具 有 语 言 无 关 性 因此 A c tiv e X 控 件 可 以 在 各 种 编 程 环 境 共 享
要 安 装 A c tiv e X 控 件 首 先 要 创 建 一 个 包 然 后 把 A c tiv e X 控 件 加 到 这 个 包 中当 然 您 也 可 以 把 A c tiv e X 控 件 加 到 元 件 选 项 板 已 有 的 页 上 这 种 情 况 下 不需 要 创 建 一 个 包
如 果 您 要 把 A c t iv e X 控 件 安 装 到 元 件 选 项 板 已 有 的 页 上 您 可 以 使 用
C o m pon e n t 菜 单 上 的 Im port A c tive X C o n tro l 命 令 打 开 Im p o r t A c tiv e X
对 话 框 如 图 5 .8 所 示
选 择 一 个 要 安 装 的 A c tiv e X 控 件 比 如 B u tto nX C on tro l L ibra r y ( V e rs io n 1 .0) 下 面 的 C la ss N a m e s 框 显 示 该 A c tiv e X 控 件 的 类 名 一 般 不 需 要修 改 除 非 与 其 它 A c tiv e X 控 件 重 名 Pa le t te Pa g e 框 用 于 指 定 A c t iv e X 控件 要 安 装 到 元 件 选 项 板 的 哪 一 页 上 一 般 选 A c tiv e X 当 然 也 可 以 选
其 它 页 如 S ta nda rd 甚 至 键 入 一 个 不 存 在 的 页 C+ + Bu ild e r 3 将 在 元 件选 项 板 上 自 动 增 加 这 一 页
图 5 .8 引 入 A c tiv e X 控 件
U n it F ile N a m e 框 是 该 A c tiv e X 控 件 的 外 套 文 件 ( 包 括 完 整 的 路 径 ) S earc h Pa th 框 是 编 译 器 的 搜 索 路 径 一 般 来 说 C la ss N a m e s 框 P a le tte P a g e 框 U n it F ile N a m e 框 以 及 S earc h P a th 框 的 内 容 都 不 需 要 修 改
单 击 In s ta l l 按 钮 C+ + Bu ild e r 3 将 打 开 In s ta l l 对 话 框 如 图 5 .9 所 示
图 5 .9 指 定 要 把 A c tiv e X 控 件 加 到 哪 一 个 包 中
您 既 可 以 把 A c tiv e X 加 到 已 有 的 包 中 也 可 以 加 到 一 个 新 的 包 中 如 果 要 把A c tiv e X 加 到 一 个 新 的 包 中 翻 到 In to N e w P a c k a g e 页 在 F ile N a m e 框 内 键 入 包 的 文 件 名 在 D e s c r ip t io n 框 内 键 入 关 于 包 的 简 短 描 述 ( 可 选 ) 然 后 单 击 OK 按 钮
Im port A c tiv e X 对 话 框 列 出 了 所 有 已 注 册 的 A c tiv e X 控 件 如 果 要 安 装 的A c t iv e X 控 件 还 没 有 注 册 您 可 以 单 击 A d d 按 钮 打 开 R e g is te r O L E C on tro l 对 话 框 选 择 要 注 册 的 A c tiv e X 控 件 ( . OC X) 如 图 5 .10 所 示
图 5 .10 注 册 新 的 A c tiv e X 控 件
怎 样 使 用 Ac ti ve X 控 件
注 册 和 安 装 了 A c tiv e X 控 件 后 您 可 以 像 使 用 VC L 元 件 那 样 使 用 A c tiv e X 控件 包 括 用 O b ject In s p ec to r修 改 它 的 特 性 在 运 行 期 调 用 它 的 方 法 或 响 应 它的 事 件
如 果 想 知 道 A c tiv e X 控 件 有 哪 些 方 法 每 个 方 法 有 哪 些 参 数 您 可 以 查 阅 该A c tiv e X 控 件 的 帮 助 文 件 或 者 通 过 Ty p e L ib ra r y 编 辑 器 显 示 它 的 类 型 信息
后 面 在 介 绍 OL E 自 动 化 时 将 提 到 调 用 自 动 化 对 象 的 方 法 时 可 以 省 略 掉 部分 参 数 实 际 上 某 些 A c tiv e X 控 件 也 允 许 省 略 掉 部 分 参 数 但 省 略 的 语 法
不 同 调 用 A c tiv e X 控 件 的 方 法 时 参 数 个 数 不 能 少 不 过 您 可 以 用 值 为U n a ssig n e d 或 VT _ E M P T Y 的 V a r ia n t 类 型 的 变 量 去 代 替 您 不 感 兴 趣 的 参 数程 序 示 例 如 下
V a r ia n t V = U n a s s ig n e d ;
A c tiv e X C on tro l-> M e thod( c l R e d, V , V , V , 100);
这 里 顺 便 介 绍 一 下 怎 样 调 试 A c tiv e X 控 件 由 于 A c tiv e X 控 件 不 是 一 个 可 以 单独 执 行 的 程 序 您 只 能 象 调 试 动 态 链 接 库 那 样 先 使 用 Ru n 菜 单 上 的
P a ra m e te rs |
命 令 打 开 |
R u n P a ra m e te rs | 对 话 框 |
在 |
H o s t A p p lic a t io n |
---|---|---|---|---|---|
框 内 键 入 一 个 |
客 户 程 序 |
然 后 使 用 Ru n | 菜 单 上 |
的 |
Ru n 命 令 运 行 客 户 |
程 序 在 客 户 程 序 中 操 作 A c tiv e X 控 件 如 果 您 事 先 在 A c tiv e X 控 件 的 实 现 单元 中 设 置 了 断 点 您 就 可 以 通 过 单 步 或 跟 踪 等 手 段 调 试 A c tiv e X 控 件
Ac ti veF or m
什 么 是 A c tiv e F o rm 从 本 质 上 讲 A c tiv e F o rm 也 是 A c t iv e X 控 件 不 同 的 是一 般 的 A c tiv e X 控 件 是 单 一 的 控 件 所 谓 单 一 是 指 它 只 能 从 一 个 VC L 控 件 转换 而 来 而 A c tiv e F o rm 可 以 把 一 个 或 多 个 VC L 控 件 转 换 为 一 个 复 合 的 A c t iv e X 控 件
这 项 技 术 为 什 么 取 名 为 A c tiv e F o rm 因 为 需 要 有 一 个 类 似 于 Fo rm 的 容 器 来放 这 些 VC L 控 件 注 意 A c tiv e F o rm 并 不 是 这 些 VC L 控 件 的 大 杂 烩 它 只 输出 它 自 己 的 特 性 方 法 和 事 件 而 A c tiv e F o rm 上 的 VC L 控 件 只 是 在 A c t iv e F o rm
内 部 使 用 即 使 要 用 到 某 个 VC L 控 件 的 特 性 方 法 和 事 件 也 只 能 在
A c tiv e F o rm 的 名 义 下 输 出
A c tiv e F o rm 上 一 般 放 可 视 的 元 件 也 可 以 放 非 可 视 的 元 件 如 TTa b le TQ u e ry 等 这 样 就 能 用 强 大 的 数 据 库 引 擎 BD E 结 合 C+ + Bu i ld e r 3 的 D a ta B roke r技 术实 现 分 布 式 数 据 集
当 A c tiv e F o rm 在 W e b 上 发 布 的 时 候 C+ + Bu ild e r 3 会 自 动 生 成 一 个 HT M L 页面 包 含 对 该 A c tiv e F o rm 的 引 用 用 户 可 以 通 过 W W W 浏 览 器 如 M ic ros oft In te rn e t E x p lo re r或 N e ts c a p e N a v ig a to r来 显 示 和 运 行 这 个 A c tiv e F o rm
要 创 建 A c tiv e F o rm 其 过 程 与 创 建 A c tiv e X 控 件 非 常 相 似 为 了 清 晰 起 见我 们 不 厌 其 烦 把 有 关 步 骤 完 整 地 列 出 来
首 先 使 用 F ile 菜 单 上 的 N e w 命 令 打 开 N e w I te m s 对 话 框 翻 到
A c tiv e X 页 双 击 A c tiv e F o rm 图 标 打 开 A c tiv e F o rm 向 导 如 图 5 .1 1 所
示
图 5 .11 A c tive F o rm 向 导
N e w A c tiv e X N a me 框 内 显 示 的 是 A c tiv e F o rm 的 默 认 名 称 Im p le m e n ta tio n U n it 框 内 显 示 的 是 A c tiv e F o rm 的 实 现 单 元 的 默 认 名 称 P ro ject N a m e
框 内 显 示 的 是 A c tiv e F o rm 的 项 目 名 称 如 果 有 必 要 的 话 您 可 以 修 改 上 述 三个 名 称 由 于 A c tiv e F o rm 只 能 基 于 T A c tiv e F o rm 因 此 VC L C la s s N a me 框 是 变 灰 的
与 A c tiv e X 控 件 一 样 如 果 选 中 In clu d e D e s ig n - T im e L icen s e 复 选 框 表示 在 建 立 A c tiv e F o rm 时 将 加 上 许 可 文 件 ( 扩 展 名 是 .L IC ) 除 非 用 户 拥 有 许 可文 件 的 合 法 拷 贝 否 则 用 户 只 能 作 为 最 终 用 户 使 用 它 无 法 在 开 发 环 境中 打 开 它 如 果 选 中 In c lu d e A bout B o x 复 选 框 表 示 A c tiv e F o rm 中 将 包
含 A bout 框 如 果 选 中 In c lu d e V e rs io n In fo rm a tio n 复 选 框 表 示 要 在
A c tiv e F o rm 中 包 含 版 本 信 息 单 击 OK 按 钮 向 导 将 自 动 创 建 类 型 信 息
下 一 步 就 象 设 计 一 个 单 Fo rm 的 应 用 程 序 完 全 一 样 从 元 件 选 项 板 上 选 择 一个 或 多 个 可 视 或 非 可 视 的 元 件 加 到 A c tiv e F o rm 上 这 里 再 强 调 一 下
A c tiv e F o rm 上 的 元 件 只 是 A c tiv e F o rm 内 部 使 用 的 如 果 您 要 把 A c t iv e F o rm 上某 个 元 件 的 特 性 方 法 和 事 件 对 外 输 出 您 只 能 在 A c tiv e F o rm 的 名 义 下 输 出这 意 味 着 您 必 须 在 A c tiv e F o rm 的 接 口 中 增 加 新 的 成 员 然 后 通 过 编 程 间 接地 访 问 A c tiv e F o rm 上 的 元 件 也 就 是 说 要 给 A c tiv e F o rm 上 的 元 件 的 特 性方 法 或 事 件 加 上 一 层 外 套 此 外 您 还 可 能 要 输 出 其 它 自 定 义 的 特 性 方法 和 事 件 这 时 候 您 就 必 须 编 辑 A c tiv e F o rm 的 类 型 库
要 打 开 A c tiv e F o rm 的 类 型 库 使 用 V ie w 菜 单 上 的 T y p e L ib ra r y 命 令打 开 T y pe L ibra ry 编 辑 器 然 后 按 照 前 面 介 绍 的 方 法 加 入 新 的 成 员 举例 来 说 假 设 A c tiv e F o rm 上 有 一 个 编 辑 框 E d it1 要 输 出 编 辑 框 的 内 容 即 Te x t 特 性 您 必 须 在 A c tiv e F o rm 中 增 加 一 个 诸 如 M y T e x t 的 特 性 然 后 您 得 在A c tiv e F o rm 的 实 现 单 元 中 定 义 下 面 两 个 方 法
/ /-
S T D M E T H O D IM P T A c tiv e F o rm X Im p l::s e t_ M y T e x t( V A R IA N T _ B O O L V a lu e )
{
tr y
{
c o n s t D IS P ID d is p id = 1 ;
if ( F ire O n R e q u e s t E d it( d isp id ) = = S _ F A L S E ) re tu rn S _ F A L S E ;
m _ V c lC tl-> M y T e x t = V a lu e ; F ire O n C h a n g e d ( d is p id ) ;
}
catch ( E x c ep t io n & e )
{
re tu rn E rro r( e .M e s s a g e .c _ s tr ( ) , I ID _ IA c t iv e F o rm X ) ;
}
re tu rn S _ OK;
};
/ /-
S T D M E T H O D IM P T A c tiv e F o rm X Im p l::g e t_ M y T e x t ( V A R IA N T _ B O O L * V a lu e )
{
tr y
{
* V a lu e = m _ V c lC tl-> M y T e x t ;
}
catch ( E x c ep t io n & e )
{
re tu rn E rro r( e .M e s s a g e .c _ s tr ( ) , I ID _ IA c t iv e F o rm X ) ;
}
re tu rn S _ OK;
};
有 必 要 的 话 还 要 创 建 A c tiv e F o rm 的 特 性 页 这 是 为 了 在 某 些 编 程 环 境 中 可以 在 设 计 期 修 改 A c tiv e F o rm 的 特 性 最 后 就 是 注 册 A c t iv e F o rm 如 果 要 在 C+ + B u ild e r 3 的 环 境 中 使 用 的 话 需 要 把 它 安 装 到 元 件 选 项 板 上 并 把 它 作 为 VC L 控 件 一 样 使 用 关 于 创 建 特 性 页 注 册 和 安 装 A c tiv e F o rm 的 步 骤 与 A c t iv e X 控 件 是 一 样 的
在 We b 上 发 布 Ac ti ve X
A c tiv e X 控 件 或 A c tiv e F o rm 设 计 好 后 您 可 能 要 通 过 W e b 服 务 器 在 In te rn e t 上发 布 这 个 A c tiv e X 控 件 或 A c tiv e F o rm 为 此 您 首 先 要 正 确 设 置 有 关 W e b 发布 的 选 项
要 设 置 有 关 W e b 发 布 的 选 项 使 用 P ro ject 菜 单 上 的 W e b D e p lo y m e nt O p tions 命 令 打 开 W e b D e p lo y m e nt O p tions 对 话 框 如 图 5 .12 所 示
图 5 .12 设 置 We b 发 布 的 选 项
- 1 Pro ject 页
Ta rg e t D ir 框 用 于 指 定 要 发 布 的 A c tiv e X 控 件 或 A c tiv e F o rm 的 .O C X 文 件 在W e b 服 务 器 上 的 路 径 可 以 是 常 规 的 路 径 如 C :\ XXH \M y A c tiv e X \ 也 可 以 是通 用 命 名 约 定 UNC 如 \\M y S e rv e r \ O C X _ F ile s
Ta rg e t U R L 框 用 于 指 定 要 发 布 的 A c tiv e X 控 件 或 A c tiv e F o rm 在 W e b 服 务器 上 的 UR L 不 包 括 .O C X 本 身 如 h ttp : // m y m a c h in e . borla nd .c o m /
HT M L D ir 框 用 于 指 定 一 个 HT M L 文 件 的 路 径 可 以 是 常 规 的 路 径 或UNC 该 HT M L 文 件 嵌 入 了 要 发 布 的 A c tiv e X 控 件 或 A c tiv e F o rm 作 测 试 用如 果 没 有 W e b 服 务 器 您 可 以 指 定 一 个 本 地 的 UR L 如 file :/// c :\M y D ir\
您 可 以 把 A c tiv e X 控 件 或 A c tiv e F o rm 的 .O C X 文 件 以 及 相 关 的 包 及 其 它 文 件 捆绑 并 压 缩 在 一 个 文 件 中 即 我 们 常 见 的 .C A B 文 件 这 样 能 够 显 著 地 减 少 用户 下 载 的 时 间
如 选 中 U s e CA B F ile C o m p r e s s io n 复 选 框 表 示 要 将 OC X 及 其 相 关 的 文件 压 缩 成 一 个 CA B 文 件
如 选 中 In clu d e F ile V e rs io n N u m b e r 复 选 框 表 示 要 包 含 版 本 号
如 选 中 A u to in c rem en t R e leas e N u m b er 复 选 框 表 示 要 自 动 增 加 项 目 的发 布 号
如 选 中 C ode S ign P ro je c t 复 选 框 表 示 要 在 .O C X 或 .C A B 文 件 中 包 含 签名 信 息
如 选 中 D e p lo y R e qu ire d P a c k a g e s 复 选 框 表 示 同 时 发 布 OC X 需 要 的 包如 选 中 D e p lo y A dd itiona l F i le s 复 选 框 表 示 要 同 时 发 布 其 它 相 关 的 文 件这 些 相 关 的 文 件 由 W e b D e p lo y m e n t O p tions 对 话 框 的 A dd itiona l F i le s 页 指 定
- Pac kages 页
此 页 用 于 指 定 要 随 A c tiv e X 或 A c tiv e F o rm 一 起 发 布 的 包 如 图 5 .13 所 示
P ack a g es u s ed b y th is P ro je c t 列 表 框 内 列 出 了 当 前 的 A c tiv e X 项 目 中 使 用的 运 行 期 包 您 可 以 对 其 中 每 一 个 包 分 别 设 置 选 项
如 选 择 |
C o m p re s s In S e p a ra te |
C A B |
表 示 包 单 独 压 缩 成 一 个 .C A B 文 件 |
|
---|---|---|---|---|
如 选 择 文 件 |
Co m p re s s In P ro je c t |
CA B |
表 示 把 包 和 OC X 压 缩 在 同 一 个 .C A B | |
如 选 中 |
U s e F ile V e rs ionInfo |
复 选 |
框 |
表 示 要 把 版 本 信 息 加 到 项 目 的 .IN F |
文 件 中 如 选 中 C ode S ig n F ile 复 选 框 表 示 要 在 包 或 .C A B 文 件 中 加 入签 名 信 息
Ta rg e t U R L 框 用 于 指 定 包 在 W e b 服 务 器 上 的 UR L 如 果 这 个 框 空 着 W W W 浏 览 器 假 定 能 够 在 本 地 找 到 这 个 包 文 件 如 果 W W W 浏 览 器 没 有 找 到这 个 包 文 件 下 载 失 败
T a rg e t D ire c to r y 框 用 于 指 定 包 在 服 务 器 上 的 路 径 可 以 是 常 规 路 径 也可 以 是 UNC
- Add itional Files 页
此 页 用 于 指 定 要 随 OC X 一 起 发 布 的 其 它 文 件 如 果 有 包 或 其 它 文 件 随
A c tiv e X 控 件 或 A c tiv e F o rm 一 起 发 布 C+ + Bu ild e r 3 会 自 动 生 成 .IN F 文 件这 一 页 上 的 选 项 与 P ack a g es 页 几 乎 完 全 相 同 这 里 不 再 赘 述
图 5 .1 3 指 定 要 随 A c tiv e X 一 起 发 布 的 包
- Cod e Signing 页
如 果 在 P ro ject 页 选 中 了 C ode S ign P ro je c t 复 选 框 每 个 要 发 布 的 文件 都 可 以 加 上 一 个 数 字 签 名 以 确 认 A c tiv e X 控 件 或 A c tiv e F o rm 的 身 份 如图 5 .14 所 示
C re d en tia ls f ile 框 用 于 指 定 一 个 证 书 文 件 ( 含 路 径 ) P r iv ate K e y 框 用于 私 人 密 码 文 件 ( 含 路 径 ) 要 获 得 这 两 种 文 件 请 与 M ic ros oft联 系
N a m e o f th is A p p lic a tio n 框 用 于 指 定 一 个 应 用 程 序 该 应 用 程 序 出 现 在数 字 证 书 中
A pp lic a t ion or c o m p a n y U R L 框 用 于 提 供 一 个 UR L 以 使 W e b 页 面 中 包 含 产品 或 公 司 的 链 接
在 C ry p togra ph ic D ige s t A lgorith m 框 内 如 选 择 M D 5 表 示 采 用 美 国 RS A 实 验 室 的 加 密 算 法 生 成 的 密 码 为 128 位 目 前 大 多 数 W W W 浏 览 器 都 支 持这 种 算 法 如 选 择 S HA 1 表 示 采 用 N IS T 和 NS A 的 加 密 算 法 生 成 的 密码 为 160 位
设 置 了 有 关 发 布 的 选 项 后 就 可 以 在 W e b 上 发 布 A c tiv e X 控 件 或 A c tiv e F o rm 了 要 在 W e b 上 发 布 A c tiv e X 控 件 或 A c tiv e F o rm 您 可 以 使 用 P ro ject 菜单 上 的 W e b D e p lo y 命 令 这 个 命 令 先 判 断 当 前 的 A c tiv e X 项 目 是 否 需 要重 新 编 译 然 后 把 编 译 生 成 的 OC X 文 件 和 HT M L 文 件 分 别 放 到 Ta rg e t D ir 和 HT M L D ir 设 定 的 目 录 中 供 用 户 通 过 W e b 浏 览 器 下 载 您 也 可 以 自己 打 开 W e b 浏 览 器 来 显 示 生 成 的 HT M L 页 面
图 5 .1 4 数 字 签 名