|
: `6 F3 b" }" L, o深 圳 市 邮 政 储 汇 局(518040)
+ l6 A6 _# x7 C7 M$ V7 I$ ?/ w王 发 军
- K$ L3 e9 N) j3 s# `1 j K* a' g v0 e--------------------------------------------------------------------------------
, _1 P; F" X$ d9 b: |一、 在Delphi 中 引 入IE 浏 览 器 控 件
9 Y$ s2 ^# b* ~# _8 k& E) E---- 由 于IE 浏 览 器 控 件 需 要 提 供 显 示 功 能 才 能 使 用, 所 以 不 能 在 程 序 中 用CreateOleObject 取 得 一 个 实 例 后 直 接 使 用 其 属 性 和 方 法, 否 则 程 序 在 运 行 时 会 引 起 错 误; 这 时 需 要 用Delphi 中 提 供 的"Import ActiveX Control" 功 能, 操 作 方 法 如 下 所 述。 9 u9 g8 |' t% _: L5 D3 G
----在"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 I8 p' ?! O, o4 D; H& A R二、 使 用IE 浏 览 器 控 件
) p7 j/ s) ?- y----以TWebBrowser(IE4 浏 览 器 控 件) 为 例 子。
- p$ E! n4 W" n9 l% d0 l, ~: v----TWebBrowser 的 常 见 属 性 和 方 法 主 要 有: + u( F5 F9 t9 j
GoBack: 方 法, 后 退 到 上 一 个 页 面。# D# v5 E; I2 K7 g0 k
GoForward: 方 法, 前 进 到 下 一 个 页 面。
1 t4 V: x7 B2 P+ W# C8 p; f7 t1 c GoHome: 方 法, 调 用 默 认 的 主 页 页 面,
2 o9 x! p) m M7 v6 S 该 页 面 在IE 的 选 项 中 设 定。
# q7 l# [, S8 E' e( o# f$ F GoSearch: 方 法, 调 用 默 认 的 搜 索 页 面,
: Y( H# w% ^9 ^! e9 |# y. l- ?1 T 该 页 面 在IE 的 选 项 中 设 定。 / l+ Y, }' K+ n6 _
---- Navigate(const URL: WideString; var Flags, TargetFrameName, PostData, Headers: OleVariant):方 法, 调 用 指 定 页 面, 具 体 参 数 如 下: , u1 s6 _* i' [* t/ X8 J
URL: 指 定 页 面 的URL。
, e, G. c4 e5 t+ }; r0 u& i7 o Flags:Word 类 型, 作 用 还 不 清 楚,9 j1 \1 G* h; j N( ^) L
可 设 为0。
8 u" b6 V6 O9 C---- TargetFrameName:WideString, 打 开 页 面 所 在 的Frame, 为 空 字 符 串 时 在 当 前 的Frame 中 打 开;TargetFrameName 指 定 的 Frame 存 在 时 在Frame 中 打 开; : w2 h' D) ?2 I+ I
----TargetFrameName 指 定 的Frame 不 存 在 时 则 新 建 一 个 窗 口 打 开, 此 时 就 相 当 于 调 用 外 部 的IE 浏 览 器 了。
, x: K: V6 d1 x. }& ~ PostData:boolean, 是 否 允 许 发 送 数 据。
j3 ~4 T& r4 h" `) U Headers:WideString,
1 T. w* q7 v' g9 W3 c/ B 要 发 送 的URL 请 求 的 头 部 数 据。
; W7 m1 ^. v! C' b Refresh: 方 法, 刷 新 当 前 页 面。
( m- s0 j0 q7 P9 Z3 e Stop: 方 法, 停 止 调 用 或 打 开 当 前 页 面。
/ L. ?1 F6 e: H LocationName: 属 性(WideString), 当 前 位 置 的 名 称。
: c+ V: w6 \; D6 n c7 t LocationURL: 属 性(WideString), 当 前 位 置 的URL。
% D1 c' P7 c6 _ Busy: 属 性(Boolean), 是 否 正 忙。
1 P4 C3 w' W5 W Visible: 属 性(Boolean), 浏 览 器 窗 口 是 否 可 见。
4 K, {$ x, ^6 |8 }' F' X& e! Z---- ( 以 下 属 性 为 在TWebBrowser 新 增, TWebBrowser_V1 中 没 有, 其 作 用 有 待 探 索)
9 A/ Z* O4 i) q1 j, G; [ StatusBar: 属 性(Boolean), 是 否 显 示 状 态 栏。
; a" c8 ~ Y l5 h* j2 y% Q8 U. c StatusText: 属 性(WideString), 状 态 栏 内 容。+ X! F0 I8 k/ p+ k6 y/ {; S
ToolBar: 属 性(SYSINT), 工 具 栏 中 的 内 容。3 B6 L+ z% G2 @) Y
MenuBar: 属 性(Boolean), 是 否 显 示 菜 单 条。
_/ }- R5 p5 a5 z! W, q FullScreen: 属 性(Boolean), 是 否 全 屏 显 示。0 M/ P) ~- X: T; Q7 j3 H
Offline: 属 性(Boolean), 是 否 脱 机 浏 览。
a3 |- o$ V7 o* e& ` AddressBar: 属 性(Boolean), 是 否 显 示 地 址 栏。
3 Z n0 a* B0 t& b4 t----TWebBrowser 的 常 见 事 件 主 要 有:
$ q `# p# u, v( @9 `9 s5 s----OnStatusTextChange = procedure(Sender: TObject; const Text: WideString) of object;
! J) o+ K- }% C( a5 u% r8 O" F* @----在 状 态 栏 提 示 信 息 变 化 时 发 生, 参 数 Text 为 当 前 状 态 栏 提 示 信 息, 我 们 可 以 根 据 该 信 息 来 更 新 我 们 自 己 的 状 态 栏 提 示 信 息 或 处 理 其 它 的 事 务。
' k) f. d* e( P9 x& h----OnProgressChange = procedure(Sender: TObject; Progress, ProgressMax: Integer) of object;
5 }2 W/ W) }% N% l----在 打 开 页 面 的 进 度 变 化 时 发 生, 参 数 Progress 为 当 前 进 度,ProgressMax 为 总 进 度, 我 们 可 以 根 据 这 两 个 参 数 来 更 新 我 们 自 己 的 状 态 栏 提 示 信 息 或 处 理 其 它 的 事 务。
6 s1 S) l4 P: P9 j$ q+ b4 D OnCommandStateChange = procedure(Sender: + D! V" G% I2 d
TObject; Command: Integer; Enable: WordBool) of object; $ N4 c- A8 `( ]
----当 执 行 新 的 命 令 时 发 生,Command 为 命 令 标 识,Enable 为 是 否 允 许 执 行 该 命 令。 * N! C, ?1 R& a5 I
OnTitleChange = procedure(Sender: TObject;5 V3 Y+ g( m' V& c0 r% i+ x
const Text: WideString) of object;
2 o: ^5 h0 h. M) b----在 页 面 的 标 题 发 生 变 化 时 发 生,Text 为 当 前 标 题。
h1 T8 V) R `* M( R/ C OnPropertyChange = procedure(Sender: TObject;
. w: r V( M& p- ~ const Property_: WideString) of object; . D2 e% K; O. x9 P# N" \+ b- C
----在 页 面 的 属 性 发 生 变 化 时 发 生,Property_ 为 属 性 名 称
$ P: b& A- P" z' _ OnDownloadComplete: TNotifyEvent
, s% W. e6 T: U1 w& e8 `+ a% ` 在 下 载 页 面 完 成 后 发 生。
. D! ]3 i) y( `& n+ D OnDownloadBegin: TNotifyEvent3 r8 o. G& e8 V3 T5 ~; v
在 下 载 页 面 开 始 前 发 生。
& s- H* d, p9 P& q4 u) T7 b三、 两 个 例 子
& R2 x- |' N1 h |+ a7 ?----1. 制 作 自 己 的 帮 助 系 统 " d) N! g/ E/ u: C1 d+ e. b7 s: G) b
----我 们 利 用IE 浏 览 器 控 件 为 用 户 制 作 了 一 个 帮 助 系 统, 帮 助 文 件 由 多 个HTML 文 件 组 成, 一 个 主 题 对 应 一 个 HTML 文 件(Topic.HTM), 每 个 主 题 下 的 项 目 对 应HTML 文 件 中 的 一 个 标 签( #Item)。 这 样 在 我 们 的 系 统 中, 就 不 必 再 调 用IE 浏 览 器 或 WinHelp 程 序 来 为 用 户 提 供 帮 助 了。 相 信 大 家 知 道HTML 帮 助 文 件 与 传 统 的HLP 帮 助 文 件 相 比 的 优 势 所 在 吧。
7 |. Z- S1 E9 M( v" ~4 ]9 S9 ]----在 下 面 例 子 中, 演 示 了TWebBrowser(IE4 浏 览 器 控 件) 的Navigate 方 法 的 使 用 方 法。 请 注 意 程 序 中 的 注 释。 下 面 为 程 序 的 主 要 片 段。{ 根 据 主 题 和 项 目 调 用 帮 助 文 件}
/ N& v7 I" F9 x9 }9 xprocedure ShowHelp( HelpTopic,HelpItem : String );
; a5 ~1 A, x J6 ^8 w9 ~- s+ mvar
4 P7 V" O- u7 J" S) b, K7 D1 q TargetFrameName,PostData,Heads,Flags : OleVariant;3 P, a$ h' M1 g& v' [5 Q5 N1 m$ N! F
URL : widestring;
1 y1 H; p4 G1 }$ l) T5 C7 c* Tbegin
. K0 E* X* {$ d3 y4 ?: h) K TargetFrameName := '';
& @# i; O# t$ }4 X H { 指 定Frame 的 空 字 符 串 时,
7 {8 T" ^" N/ H 则 在 当 前Frame 中 打 开 帮 助 文 件}
$ Q; }) S6 ] ]& C9 Q7 L5 G PostData := false;{ 不 发 送 数 据}
# l2 {% n4 d9 S. b' V$ }5 R Heads := '';{Header 信 息 为 空}* I7 r4 t% ]( I! g3 P+ V$ d, L
Flags := 0;{Flags 设 为0}$ @8 x7 [: [$ U* ]0 u# P6 y8 i# A
URL := HelpTopic + '.HTM #' +HelpItem;
' G' E" e5 J, C1 z; Q { 帮 助 信 息 的URL}3 Y, R0 |8 m1 W0 o
with formHelp.webbrowser do. w$ Y5 m' C( t& z
{ 在 帮 助 窗 口 中 的IE 浏 览 器
. b6 d7 S j1 T2 W c- \ 控 件 中 显 示 帮 助 信 息}
a) M' H8 x0 I/ _ begin3 o) ]# U6 P4 E( g# R; _
navigate(URL,Flags,TargetFrameName,( m! u" k& V. Q: f
PostData,Heads);{ 显 示 帮 助 信 息}
1 `7 o; A B3 K end;
7 s* ~" d: W3 E3 B' Tend;
1 r7 H$ ]3 {0 i0 H' S7 R1 R4 x----2. 显 示 一 个GIF 动 画
! `8 c% B, h! v----假 如 你 还 没 有 一 个 适 合 的 动 画 显 示 控 件, 不 妨 试 用 一 下 下 面 的 方 法。
5 F# K( S. G2 U$ Q! e7 C& q$ x3 u. sprocedure ShowGIF( GIFFileName : String );
( e- n1 Y+ X/ v Svar/ X" b0 x( U( [) n5 S! w, [1 }
TargetFrameName,PostData,Heads,Flags : OleVariant;0 m2 x6 q W4 w5 k8 g
URL : widestring; r2 U- j. s5 F: {
begin
; P% s& o& ?+ C% K7 G TargetFrameName := '';
/ g5 ^1 }/ ]# i( W j- j3 a { 指 定Frame 的 空 字 符 串 时,
3 Y/ e9 X* ^7 Q# T 则 在 当 前Frame 中 打 开 动 画 文 件}
/ Q5 S4 q! t; q6 [! Y PostData := false;{ 不 发 送 数 据}1 t3 j, |: L% M. q5 d/ M
Heads := '';{Header 信 息 为 空}
3 h3 b6 ?. }, s- L( X Flags := 0;{Flags 设 为0}9 h9 J f; J( N- H1 D- X
URL := GIFFileName;
$ P* L% L9 j; R; H7 S4 \ with formGIF.webbrowser do
1 ~9 R" [9 j! L' @2 H8 \; i# m{ 在 指 定 窗 口 中 的IE 浏 览 器 控 件 中 显 示 动 画}7 F2 U& f- I4 G) A
begin
4 B, d6 H) I. e5 A3 v3 k navigate(URL,Flags,TargetFrameName,Post ?" Q5 J& d; V7 J( l; {/ b
Data,Heads);{ 显 示 动 画 文 件} Z: z! Y- v( n0 ^+ P: d
end;% S8 T% [5 N, a+ r
end;
# `- n4 y2 |! X" y; ]---- 以 上 程 序 在PWIN98 +Delphi3.0 下 调 试 通 过。 5 |0 w5 l, c; V# o- J$ Z: T% T% U
|