|
4 e0 Q3 L5 C+ ^4 D深 圳 市 邮 政 储 汇 局(518040)
5 {! u E! A1 B0 R3 [) I% a王 发 军 + N2 r' x$ V9 C1 ~. Y0 Y$ O
--------------------------------------------------------------------------------
2 e( F0 s/ K& V& c$ ?$ L, C一、 在Delphi 中 引 入IE 浏 览 器 控 件
! P* Y4 G9 j8 p" o6 d1 Y/ z---- 由 于IE 浏 览 器 控 件 需 要 提 供 显 示 功 能 才 能 使 用, 所 以 不 能 在 程 序 中 用CreateOleObject 取 得 一 个 实 例 后 直 接 使 用 其 属 性 和 方 法, 否 则 程 序 在 运 行 时 会 引 起 错 误; 这 时 需 要 用Delphi 中 提 供 的"Import ActiveX Control" 功 能, 操 作 方 法 如 下 所 述。 / V$ D9 k/ G3 R* m4 I
----在"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, 其 中 有 这 三 个 控 件 的 包 装 细 节, 当 然 含 控 件 的 属 性 和 方 法 说 明 了, 它 可 以 作 为 我 们 使 用 控 件 的 参 考 资 料。 ' A q+ \7 c2 M c
二、 使 用IE 浏 览 器 控 件
4 c0 {; V( r, _* D! v, E) L----以TWebBrowser(IE4 浏 览 器 控 件) 为 例 子。
/ S$ ~! L; u% K----TWebBrowser 的 常 见 属 性 和 方 法 主 要 有:
; {, h+ a/ y9 Z6 B- p" F GoBack: 方 法, 后 退 到 上 一 个 页 面。$ D1 u X! y2 G# d6 s) J9 e( s
GoForward: 方 法, 前 进 到 下 一 个 页 面。 O- p: c% ?, U& X
GoHome: 方 法, 调 用 默 认 的 主 页 页 面,+ ?6 U4 @& J8 d) X+ p. I6 R8 |
该 页 面 在IE 的 选 项 中 设 定。
* G) n& d; t; F9 q% A, p9 H GoSearch: 方 法, 调 用 默 认 的 搜 索 页 面,
" L+ o- G' o9 v$ o 该 页 面 在IE 的 选 项 中 设 定。
& }/ \/ x* @$ a! `( f5 @" ~---- Navigate(const URL: WideString; var Flags, TargetFrameName, PostData, Headers: OleVariant):方 法, 调 用 指 定 页 面, 具 体 参 数 如 下:
7 @% j/ ]7 `' t: e5 h7 j- q+ a4 `' q URL: 指 定 页 面 的URL。7 U- y/ c; e5 k, I- G* T: D% I2 G
Flags:Word 类 型, 作 用 还 不 清 楚,
, x6 k9 y8 [) K* G6 E0 ~ 可 设 为0。 / c6 i( a! [% d$ z! q
---- TargetFrameName:WideString, 打 开 页 面 所 在 的Frame, 为 空 字 符 串 时 在 当 前 的Frame 中 打 开;TargetFrameName 指 定 的 Frame 存 在 时 在Frame 中 打 开; ' e9 a2 h: H$ V- I0 V9 b j
----TargetFrameName 指 定 的Frame 不 存 在 时 则 新 建 一 个 窗 口 打 开, 此 时 就 相 当 于 调 用 外 部 的IE 浏 览 器 了。 9 I8 c8 {6 Z; D+ A' D) b: T
PostData:boolean, 是 否 允 许 发 送 数 据。/ ^4 I3 F' Z& e6 h+ w
Headers:WideString,* i: t) C+ |2 e$ u- @; ?# P5 x% z
要 发 送 的URL 请 求 的 头 部 数 据。
* b; `5 h$ ]# s/ L* `$ z1 D Refresh: 方 法, 刷 新 当 前 页 面。
# j+ q! c+ ?+ r5 Y; b; \* M6 h" T Stop: 方 法, 停 止 调 用 或 打 开 当 前 页 面。
, g, w& k0 b" J% ^! _' ~3 e LocationName: 属 性(WideString), 当 前 位 置 的 名 称。
9 r; r+ z1 f4 |: ~8 B LocationURL: 属 性(WideString), 当 前 位 置 的URL。
5 c/ g) v3 |) o7 }- h/ X Busy: 属 性(Boolean), 是 否 正 忙。
/ _- s5 h. y1 v p) y& c+ N, ^6 L! I Visible: 属 性(Boolean), 浏 览 器 窗 口 是 否 可 见。 * c: ^8 V. W3 w" r1 g
---- ( 以 下 属 性 为 在TWebBrowser 新 增, TWebBrowser_V1 中 没 有, 其 作 用 有 待 探 索)
* i: _8 i5 ]4 ~" [8 a! K StatusBar: 属 性(Boolean), 是 否 显 示 状 态 栏。
7 X" ?# Z9 D d# Y; ]- l; `* J2 p StatusText: 属 性(WideString), 状 态 栏 内 容。
9 V5 f1 B- e) a; P ToolBar: 属 性(SYSINT), 工 具 栏 中 的 内 容。- ]: e1 z7 k' w- v! G( `
MenuBar: 属 性(Boolean), 是 否 显 示 菜 单 条。
& \* w+ C- `& ~4 q: o+ c7 C, \ FullScreen: 属 性(Boolean), 是 否 全 屏 显 示。
5 Z1 O+ W+ R* F% I& ]- x+ H5 b7 X Offline: 属 性(Boolean), 是 否 脱 机 浏 览。8 [7 u+ B8 k) v4 u) f
AddressBar: 属 性(Boolean), 是 否 显 示 地 址 栏。 0 |: H. U" f6 |) i- w7 e/ i/ b
----TWebBrowser 的 常 见 事 件 主 要 有: ; }/ e1 _0 I% c
----OnStatusTextChange = procedure(Sender: TObject; const Text: WideString) of object; i' L; L% M2 |7 g8 ~( Y7 j' _
----在 状 态 栏 提 示 信 息 变 化 时 发 生, 参 数 Text 为 当 前 状 态 栏 提 示 信 息, 我 们 可 以 根 据 该 信 息 来 更 新 我 们 自 己 的 状 态 栏 提 示 信 息 或 处 理 其 它 的 事 务。 9 D K( w5 ]" m; x0 w. p* K
----OnProgressChange = procedure(Sender: TObject; Progress, ProgressMax: Integer) of object;
! K- \9 @, F2 ^: ?" Y----在 打 开 页 面 的 进 度 变 化 时 发 生, 参 数 Progress 为 当 前 进 度,ProgressMax 为 总 进 度, 我 们 可 以 根 据 这 两 个 参 数 来 更 新 我 们 自 己 的 状 态 栏 提 示 信 息 或 处 理 其 它 的 事 务。 ' T* R6 e1 [% M% k+ S
OnCommandStateChange = procedure(Sender:
- u3 o0 `$ d) Q; u: t( C+ @/ tTObject; Command: Integer; Enable: WordBool) of object; 0 z" Z& S% z! Y; F2 g2 D
----当 执 行 新 的 命 令 时 发 生,Command 为 命 令 标 识,Enable 为 是 否 允 许 执 行 该 命 令。
# }4 r+ E: E# m OnTitleChange = procedure(Sender: TObject;+ T! X9 s1 W9 y* ?- w0 N+ a# g! [- t
const Text: WideString) of object;
2 }; a. I$ z m' E( t----在 页 面 的 标 题 发 生 变 化 时 发 生,Text 为 当 前 标 题。 8 B- L0 z# A+ q' @. p. {
OnPropertyChange = procedure(Sender: TObject;
4 l0 h/ X8 J+ Z; `) e const Property_: WideString) of object; 2 U8 P! U* @/ X% E8 L
----在 页 面 的 属 性 发 生 变 化 时 发 生,Property_ 为 属 性 名 称 & y k9 C S% |# [; a. }% Y" Q
OnDownloadComplete: TNotifyEvent0 D+ O8 @* c+ W) [; g% x
在 下 载 页 面 完 成 后 发 生。
* @. v/ _! H4 }- u OnDownloadBegin: TNotifyEvent8 o- o' W6 f( s& k" I2 H c5 L
在 下 载 页 面 开 始 前 发 生。 0 s- s+ I, _1 L
三、 两 个 例 子 # c6 v4 X# H! C8 p; f3 p
----1. 制 作 自 己 的 帮 助 系 统 % l; ]( W; Z$ C$ G, _" |4 j* @5 @
----我 们 利 用IE 浏 览 器 控 件 为 用 户 制 作 了 一 个 帮 助 系 统, 帮 助 文 件 由 多 个HTML 文 件 组 成, 一 个 主 题 对 应 一 个 HTML 文 件(Topic.HTM), 每 个 主 题 下 的 项 目 对 应HTML 文 件 中 的 一 个 标 签( #Item)。 这 样 在 我 们 的 系 统 中, 就 不 必 再 调 用IE 浏 览 器 或 WinHelp 程 序 来 为 用 户 提 供 帮 助 了。 相 信 大 家 知 道HTML 帮 助 文 件 与 传 统 的HLP 帮 助 文 件 相 比 的 优 势 所 在 吧。 7 i8 {* B; e7 j9 R v, m
----在 下 面 例 子 中, 演 示 了TWebBrowser(IE4 浏 览 器 控 件) 的Navigate 方 法 的 使 用 方 法。 请 注 意 程 序 中 的 注 释。 下 面 为 程 序 的 主 要 片 段。{ 根 据 主 题 和 项 目 调 用 帮 助 文 件}
" {' c1 @1 y, F9 @7 j vprocedure ShowHelp( HelpTopic,HelpItem : String );
/ ~" g0 \3 j2 h9 b- |var. R. S# W! _8 h- c
TargetFrameName,PostData,Heads,Flags : OleVariant;
3 q& a T' v7 {$ `( K% q URL : widestring;5 V Z4 y2 k% c, r
begin
1 G; l) |* B2 I- ~6 Z5 _1 J8 g/ Y TargetFrameName := '';/ B3 w% J4 X Z5 }' U- z( K
{ 指 定Frame 的 空 字 符 串 时,
# p3 A8 K. T' v% o2 ?) @+ M2 r& H2 H 则 在 当 前Frame 中 打 开 帮 助 文 件}& t1 ?: r! @ f4 ?( B
PostData := false;{ 不 发 送 数 据}
" R+ t$ k# Q2 v Heads := '';{Header 信 息 为 空}
# W, I ~9 s8 c4 C Flags := 0;{Flags 设 为0}; @' P$ \" u/ g" b7 ^5 E
URL := HelpTopic + '.HTM #' +HelpItem;
, V4 n+ j7 R: \ { 帮 助 信 息 的URL}9 v" `- x Z+ h2 A/ Y. I% d
with formHelp.webbrowser do
, ~5 q3 _# E/ L x s: D2 u7 V { 在 帮 助 窗 口 中 的IE 浏 览 器
* P! @% V* _; v% ?5 M; B 控 件 中 显 示 帮 助 信 息}
( ^7 R# l1 I, S: [; w begin& E, _& B$ K7 q% Z2 S4 A+ d
navigate(URL,Flags,TargetFrameName,
) r1 z7 j4 g8 _# kPostData,Heads);{ 显 示 帮 助 信 息}7 d ~1 A; b$ P! @( U; C
end;
# U2 H8 f* h* g2 K) n2 p# H' [1 Iend;
+ U" n8 z" G: N0 ~----2. 显 示 一 个GIF 动 画
. n, k1 X; v5 ^* L6 O----假 如 你 还 没 有 一 个 适 合 的 动 画 显 示 控 件, 不 妨 试 用 一 下 下 面 的 方 法。
* e) e8 M7 l) @procedure ShowGIF( GIFFileName : String );0 @* C; N7 w4 g! d- ]) p. T
var
( e0 s4 s; P# H/ p. M! D; J$ k9 N TargetFrameName,PostData,Heads,Flags : OleVariant;! [) E9 K: D9 Z4 v% I1 W2 |2 q
URL : widestring;
8 j5 J& m) y$ q% B- P7 @/ j5 ^( {begin
3 P. X- A3 W7 u3 y# y TargetFrameName := '';
J" ~) c8 P1 o; N& _. J; I { 指 定Frame 的 空 字 符 串 时, 1 W( z1 F+ f* d9 e# t4 q
则 在 当 前Frame 中 打 开 动 画 文 件}
8 B. R9 P( d3 n- t( j4 \) `8 j PostData := false;{ 不 发 送 数 据}
6 L1 ~7 L2 I) w! b: M3 w/ K Heads := '';{Header 信 息 为 空}
) E, f. R1 O# S# |7 r E+ ~ Flags := 0;{Flags 设 为0}( t+ t: [# e- l
URL := GIFFileName;" _0 a) P( }$ _! i2 k
with formGIF.webbrowser do0 O' E# W0 h- d" }
{ 在 指 定 窗 口 中 的IE 浏 览 器 控 件 中 显 示 动 画}; x; d, i B9 k1 P, B
begin1 u. u4 F# f1 b# W( L
navigate(URL,Flags,TargetFrameName,Post ?
6 e( ~( l9 J; ~( q0 r! hData,Heads);{ 显 示 动 画 文 件}6 ~1 D# s% y$ `" ^
end;
! X# ^+ P# `, S5 _& Uend;
5 {( R W# M+ ~% V \4 ]---- 以 上 程 序 在PWIN98 +Delphi3.0 下 调 试 通 过。 ) h8 f- |- T- f
|