|
2 B- G `0 O0 C# r" a深 圳 市 邮 政 储 汇 局(518040)/ `2 ]# ?: z+ V% U
王 发 军
) S" l. e9 m3 x4 i- ]& Q--------------------------------------------------------------------------------
5 m O8 G- v7 B一、 在Delphi 中 引 入IE 浏 览 器 控 件 6 w6 P9 j4 x8 M5 n
---- 由 于IE 浏 览 器 控 件 需 要 提 供 显 示 功 能 才 能 使 用, 所 以 不 能 在 程 序 中 用CreateOleObject 取 得 一 个 实 例 后 直 接 使 用 其 属 性 和 方 法, 否 则 程 序 在 运 行 时 会 引 起 错 误; 这 时 需 要 用Delphi 中 提 供 的"Import ActiveX Control" 功 能, 操 作 方 法 如 下 所 述。
: r+ |3 \7 ` l----在"Components" 菜 单 中, 调 用"Import ActiveX Control" 功 能, 在Registered Controls( 注 册 控 件) 列 表 中 选 择"Microsoft Internet Controls(Version1.1)", 下 方 的 提 示 栏 中 显 示 出 其 路 径 为 C:\PWin98\System\SHDOCVW.DLL, 在Class Names( 类 型 列 表) 中 列 出 了 可 注 册 的 三 个 控 件:TWebBrowser_V1、TWebBrowser 和TShellFolderViewOC, 分 别 为IE3 浏 览 器 控 件、IE4 浏 览 器 控 件 和"Microsoft 外 壳 文 件 夹 查 看 路 由 器" 控 件。 单 击Install 进 行 安 装。 安 装 完 成 后, 在"ActiveX" 控 件 栏 中, 将 增 加 三 个 控 件, 分 别 为TWebBrowser_V1、TWebBrowser 和TShellFolderViewOC; 在Delphi 的Imports 目 录 下, 将 创 建 一 个 文 件SHDocVw_TLB.PAS, 其 中 有 这 三 个 控 件 的 包 装 细 节, 当 然 含 控 件 的 属 性 和 方 法 说 明 了, 它 可 以 作 为 我 们 使 用 控 件 的 参 考 资 料。 4 g# e2 S r/ f5 N# G
二、 使 用IE 浏 览 器 控 件 & G1 h& o$ g! F2 T- s4 f
----以TWebBrowser(IE4 浏 览 器 控 件) 为 例 子。
1 S4 v$ E0 j& X5 I7 D% B$ j----TWebBrowser 的 常 见 属 性 和 方 法 主 要 有: ( i$ k" c' ]/ i+ ^) q
GoBack: 方 法, 后 退 到 上 一 个 页 面。
+ I4 S" e5 z8 V* N2 g- h GoForward: 方 法, 前 进 到 下 一 个 页 面。
; ^0 Z* r/ T. F5 V0 H1 Q GoHome: 方 法, 调 用 默 认 的 主 页 页 面,
; x+ B; C% T% e% J) w# e0 K 该 页 面 在IE 的 选 项 中 设 定。9 p4 ^4 o f6 P: }6 u2 V
GoSearch: 方 法, 调 用 默 认 的 搜 索 页 面,
1 C" S' @: S, F9 a5 P9 H- ]: c1 Y2 P 该 页 面 在IE 的 选 项 中 设 定。 ( h/ E5 B& u" z J5 G' {
---- Navigate(const URL: WideString; var Flags, TargetFrameName, PostData, Headers: OleVariant):方 法, 调 用 指 定 页 面, 具 体 参 数 如 下:
' q) U5 z* a/ J3 X URL: 指 定 页 面 的URL。% m4 o2 v" @% p1 J- }! C K8 m
Flags:Word 类 型, 作 用 还 不 清 楚,
# b: F4 [/ C. @. r, z. } 可 设 为0。
; e' G6 ^4 a- s---- TargetFrameName:WideString, 打 开 页 面 所 在 的Frame, 为 空 字 符 串 时 在 当 前 的Frame 中 打 开;TargetFrameName 指 定 的 Frame 存 在 时 在Frame 中 打 开;
0 V3 k5 O% ]! g9 }, f----TargetFrameName 指 定 的Frame 不 存 在 时 则 新 建 一 个 窗 口 打 开, 此 时 就 相 当 于 调 用 外 部 的IE 浏 览 器 了。 & A! g; z c% i, @$ E+ q6 K4 c
PostData:boolean, 是 否 允 许 发 送 数 据。
3 ^; [+ l1 N( d: ^5 Y Headers:WideString,& j- \6 D* P9 d/ c2 f; y
要 发 送 的URL 请 求 的 头 部 数 据。+ a6 ]9 _% ^9 c4 q7 f I# K @- H8 y
Refresh: 方 法, 刷 新 当 前 页 面。
/ z9 }5 k1 }: }* k4 X% ^ Stop: 方 法, 停 止 调 用 或 打 开 当 前 页 面。
; }, T& Y9 A. u* }3 A9 [ LocationName: 属 性(WideString), 当 前 位 置 的 名 称。, O0 D- x/ d& ]6 d) h& E
LocationURL: 属 性(WideString), 当 前 位 置 的URL。
/ V% I- h! B9 w4 c. c, [ Busy: 属 性(Boolean), 是 否 正 忙。
: I8 y. a) b2 V% l! q Visible: 属 性(Boolean), 浏 览 器 窗 口 是 否 可 见。
6 P* Y. j" f/ B, Q# y+ Q---- ( 以 下 属 性 为 在TWebBrowser 新 增, TWebBrowser_V1 中 没 有, 其 作 用 有 待 探 索)
. N2 i4 q4 r7 D& [ StatusBar: 属 性(Boolean), 是 否 显 示 状 态 栏。
6 M$ n" Q1 I" ?- A: F StatusText: 属 性(WideString), 状 态 栏 内 容。
: d: ~; u% L. |2 y! [. I: C7 }1 B ToolBar: 属 性(SYSINT), 工 具 栏 中 的 内 容。# H2 [' ~6 ^3 L3 z
MenuBar: 属 性(Boolean), 是 否 显 示 菜 单 条。
. \$ }# N3 ~9 U$ P8 s8 T7 I c% x1 w. c FullScreen: 属 性(Boolean), 是 否 全 屏 显 示。. n9 ?5 t' f5 [$ M
Offline: 属 性(Boolean), 是 否 脱 机 浏 览。
- U$ Y' R" } W+ A) P; v AddressBar: 属 性(Boolean), 是 否 显 示 地 址 栏。 X m! c: {& Z9 [) d
----TWebBrowser 的 常 见 事 件 主 要 有:
. f- l$ W3 K4 R2 d M----OnStatusTextChange = procedure(Sender: TObject; const Text: WideString) of object;
" c. M* M2 f8 v) m) H( r----在 状 态 栏 提 示 信 息 变 化 时 发 生, 参 数 Text 为 当 前 状 态 栏 提 示 信 息, 我 们 可 以 根 据 该 信 息 来 更 新 我 们 自 己 的 状 态 栏 提 示 信 息 或 处 理 其 它 的 事 务。 * C7 S5 ]' H: p' H2 C' v
----OnProgressChange = procedure(Sender: TObject; Progress, ProgressMax: Integer) of object;
1 ~+ N2 p: T9 l0 X- u+ T2 `----在 打 开 页 面 的 进 度 变 化 时 发 生, 参 数 Progress 为 当 前 进 度,ProgressMax 为 总 进 度, 我 们 可 以 根 据 这 两 个 参 数 来 更 新 我 们 自 己 的 状 态 栏 提 示 信 息 或 处 理 其 它 的 事 务。 # r6 N% r. y* H& |4 I1 I
OnCommandStateChange = procedure(Sender:
7 R7 d+ A5 {* wTObject; Command: Integer; Enable: WordBool) of object; 3 R, C* C% b6 y" |
----当 执 行 新 的 命 令 时 发 生,Command 为 命 令 标 识,Enable 为 是 否 允 许 执 行 该 命 令。
* K3 ~9 k i$ [$ H$ [6 V OnTitleChange = procedure(Sender: TObject;
5 K0 o- F, L; l* ? const Text: WideString) of object;
8 o; y+ w5 m8 [- r6 Q----在 页 面 的 标 题 发 生 变 化 时 发 生,Text 为 当 前 标 题。 [8 f/ m3 T: B* Z& [3 X
OnPropertyChange = procedure(Sender: TObject;
; W: n; M U9 ?. A \# } const Property_: WideString) of object;
* w. l" N X: f$ K _----在 页 面 的 属 性 发 生 变 化 时 发 生,Property_ 为 属 性 名 称
- b$ h3 l! r/ w$ Q {! s0 ?) h OnDownloadComplete: TNotifyEvent* K' n/ @1 r' k7 ?# e
在 下 载 页 面 完 成 后 发 生。& ]2 t$ |/ a6 h: ~" G
OnDownloadBegin: TNotifyEvent4 o( S5 |$ ?3 s/ p6 X1 h6 }9 s) c9 b
在 下 载 页 面 开 始 前 发 生。 # r' g5 f' m/ f
三、 两 个 例 子
0 L: {+ O+ v; h- _5 e----1. 制 作 自 己 的 帮 助 系 统 # F* \$ [ P+ C3 ?
----我 们 利 用IE 浏 览 器 控 件 为 用 户 制 作 了 一 个 帮 助 系 统, 帮 助 文 件 由 多 个HTML 文 件 组 成, 一 个 主 题 对 应 一 个 HTML 文 件(Topic.HTM), 每 个 主 题 下 的 项 目 对 应HTML 文 件 中 的 一 个 标 签( #Item)。 这 样 在 我 们 的 系 统 中, 就 不 必 再 调 用IE 浏 览 器 或 WinHelp 程 序 来 为 用 户 提 供 帮 助 了。 相 信 大 家 知 道HTML 帮 助 文 件 与 传 统 的HLP 帮 助 文 件 相 比 的 优 势 所 在 吧。 + \0 ~6 i" ^8 N" F
----在 下 面 例 子 中, 演 示 了TWebBrowser(IE4 浏 览 器 控 件) 的Navigate 方 法 的 使 用 方 法。 请 注 意 程 序 中 的 注 释。 下 面 为 程 序 的 主 要 片 段。{ 根 据 主 题 和 项 目 调 用 帮 助 文 件} 3 ]/ B, ?* ^/ h- O, Y( O+ `7 R+ W
procedure ShowHelp( HelpTopic,HelpItem : String );
: k& v0 F' P& I+ b9 K$ X1 F" Bvar' f! N1 y. {% A& ?0 `% `
TargetFrameName,PostData,Heads,Flags : OleVariant;
! j0 Y" Z d4 F; m% F( }+ C# u% } URL : widestring;+ ?. V; }7 f& `/ _& ]/ u
begin
/ z. H, _* I$ H) U( m/ o2 X TargetFrameName := '';$ }1 a+ {" \! P, t
{ 指 定Frame 的 空 字 符 串 时,
6 m) x% x# \0 H! n; d& } 则 在 当 前Frame 中 打 开 帮 助 文 件}
7 [4 h/ A, i4 d# ` PostData := false;{ 不 发 送 数 据}$ Z2 i1 n6 t+ k; S. a
Heads := '';{Header 信 息 为 空}1 X' a* q+ r1 p/ Z/ V) P
Flags := 0;{Flags 设 为0}
7 S" f* Z- x4 b& [# ~ URL := HelpTopic + '.HTM #' +HelpItem;6 `4 c! M4 O, e1 x \! F
{ 帮 助 信 息 的URL}
1 i0 U5 H. l" A8 z with formHelp.webbrowser do
! Y$ M' R8 j7 c0 k2 G { 在 帮 助 窗 口 中 的IE 浏 览 器
0 {$ E+ T+ O7 V I- Z 控 件 中 显 示 帮 助 信 息}3 ]; v7 d8 X2 ^ l- h, H
begin
& L+ x1 x9 C& { navigate(URL,Flags,TargetFrameName,
3 ~1 c2 [8 z0 TPostData,Heads);{ 显 示 帮 助 信 息}
: H7 o/ J% a: H4 E end;* c ~4 E1 R) k- ^3 [
end;
# z" o& O8 ]( A- r----2. 显 示 一 个GIF 动 画 ; o! T. Z7 |( {( j
----假 如 你 还 没 有 一 个 适 合 的 动 画 显 示 控 件, 不 妨 试 用 一 下 下 面 的 方 法。 7 Z; _; Q2 Y+ N5 G
procedure ShowGIF( GIFFileName : String );6 V* X0 F9 \1 V9 y9 N/ @ [. H
var
) q! g x! M4 j9 | }* n TargetFrameName,PostData,Heads,Flags : OleVariant;/ _+ d/ d% |3 I
URL : widestring;
" _7 _! M% c1 h" Ybegin$ \3 |1 v1 s* C" G1 ?8 F5 d9 t, X1 |$ t
TargetFrameName := '';
. o2 v: R) }" \. r H$ y9 J { 指 定Frame 的 空 字 符 串 时,
8 U7 t8 W+ v: R 则 在 当 前Frame 中 打 开 动 画 文 件}
8 ]% H2 E4 f% U. d' m& Z PostData := false;{ 不 发 送 数 据}/ c; S" a$ C, C% S) @9 j8 ^7 p
Heads := '';{Header 信 息 为 空}( \3 Q4 |8 _, T2 j+ a
Flags := 0;{Flags 设 为0}- o4 H' h! P9 I1 r$ n! [
URL := GIFFileName;
- e1 {$ a" O! {. d. ^) \/ r' h with formGIF.webbrowser do
! D/ K2 R$ i& D8 l( o% y( v$ r{ 在 指 定 窗 口 中 的IE 浏 览 器 控 件 中 显 示 动 画}; v9 v, O; Z. F" _9 A0 c
begin
; i: I6 z! E N1 N$ E' u$ p navigate(URL,Flags,TargetFrameName,Post ?
9 o/ |+ G5 X2 ^; O5 S; \/ b& CData,Heads);{ 显 示 动 画 文 件}
0 |* x( \$ y. B$ i end;$ @* C: ~; o+ G: w; q6 j
end;
0 R' p; X4 q) M) {, R) L& I$ J---- 以 上 程 序 在PWIN98 +Delphi3.0 下 调 试 通 过。 3 [* |7 }' f2 b( c& u& a: I/ m' |
|