|
0 b! F" D7 s5 E
深 圳 市 邮 政 储 汇 局(518040)% b, ^4 s6 o7 f/ Y7 v6 B7 j
王 发 军
" O* x- T3 {( F/ H5 ~6 x$ `: Z-------------------------------------------------------------------------------- 5 }, `2 s9 N/ l3 s# ]
一、 在Delphi 中 引 入IE 浏 览 器 控 件
! M2 Q" Q' X- d8 ^( V5 w" A---- 由 于IE 浏 览 器 控 件 需 要 提 供 显 示 功 能 才 能 使 用, 所 以 不 能 在 程 序 中 用CreateOleObject 取 得 一 个 实 例 后 直 接 使 用 其 属 性 和 方 法, 否 则 程 序 在 运 行 时 会 引 起 错 误; 这 时 需 要 用Delphi 中 提 供 的"Import ActiveX Control" 功 能, 操 作 方 法 如 下 所 述。 ( W) J1 w" D0 K6 V8 @5 r+ l# Q
----在"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, 其 中 有 这 三 个 控 件 的 包 装 细 节, 当 然 含 控 件 的 属 性 和 方 法 说 明 了, 它 可 以 作 为 我 们 使 用 控 件 的 参 考 资 料。
+ S5 h3 S9 w3 C- N1 M0 e* h二、 使 用IE 浏 览 器 控 件 % y# ]. T, X& J/ h, H- U
----以TWebBrowser(IE4 浏 览 器 控 件) 为 例 子。
" o; m5 D( _% i. t, u; @* W( v----TWebBrowser 的 常 见 属 性 和 方 法 主 要 有: ~; P1 w0 w5 w4 M4 {
GoBack: 方 法, 后 退 到 上 一 个 页 面。$ N7 ]7 X1 `* Q; [4 s9 z8 P! J, M, `
GoForward: 方 法, 前 进 到 下 一 个 页 面。$ l0 n3 q! T: x. c
GoHome: 方 法, 调 用 默 认 的 主 页 页 面,3 v( H+ t& D5 u: _: A" e+ E
该 页 面 在IE 的 选 项 中 设 定。% Y. H0 m+ Q5 C% D! K' I, R! I G2 t
GoSearch: 方 法, 调 用 默 认 的 搜 索 页 面, & w4 [& ^3 q# i- n" x) S! }
该 页 面 在IE 的 选 项 中 设 定。 5 {1 k- W1 |, Q3 e4 T" V
---- Navigate(const URL: WideString; var Flags, TargetFrameName, PostData, Headers: OleVariant):方 法, 调 用 指 定 页 面, 具 体 参 数 如 下:
. H! q% E8 l* V; s/ a& _1 L; s URL: 指 定 页 面 的URL。
+ F9 |2 H% J- [7 W; n( G Flags:Word 类 型, 作 用 还 不 清 楚,
' ?: D9 }4 M( R0 B; D' i 可 设 为0。
& W$ y7 Z+ p9 Y& e( R7 ?---- TargetFrameName:WideString, 打 开 页 面 所 在 的Frame, 为 空 字 符 串 时 在 当 前 的Frame 中 打 开;TargetFrameName 指 定 的 Frame 存 在 时 在Frame 中 打 开;
) @- k/ m# P& F2 `, K----TargetFrameName 指 定 的Frame 不 存 在 时 则 新 建 一 个 窗 口 打 开, 此 时 就 相 当 于 调 用 外 部 的IE 浏 览 器 了。
' j( m4 Z6 W: U3 v! ~' Y- Y2 O PostData:boolean, 是 否 允 许 发 送 数 据。
( k* }" e: {6 Y3 { Headers:WideString,
$ h' q1 I0 s7 L4 A 要 发 送 的URL 请 求 的 头 部 数 据。
' ^0 J& r' m% e+ q' N: q Refresh: 方 法, 刷 新 当 前 页 面。
) I8 [1 U$ s. L/ |3 Z: E }" c Stop: 方 法, 停 止 调 用 或 打 开 当 前 页 面。
7 C, U% }; w! M- G! f0 w LocationName: 属 性(WideString), 当 前 位 置 的 名 称。
# x7 x8 X& E8 Z3 \5 _; D( N: m4 ~ LocationURL: 属 性(WideString), 当 前 位 置 的URL。
+ j/ \+ |- {3 i! ^* A, z, ` Busy: 属 性(Boolean), 是 否 正 忙。
$ n' W+ m6 z% k' `3 N# O& `8 f Visible: 属 性(Boolean), 浏 览 器 窗 口 是 否 可 见。
7 ?/ a( q! f2 i---- ( 以 下 属 性 为 在TWebBrowser 新 增, TWebBrowser_V1 中 没 有, 其 作 用 有 待 探 索) ( b! C# V9 z: M6 c2 v) X. r
StatusBar: 属 性(Boolean), 是 否 显 示 状 态 栏。; c+ Q; n% c, v
StatusText: 属 性(WideString), 状 态 栏 内 容。0 I2 c u# Y. x' q! \9 F
ToolBar: 属 性(SYSINT), 工 具 栏 中 的 内 容。
, m0 v0 w) X& n5 x! U, R MenuBar: 属 性(Boolean), 是 否 显 示 菜 单 条。
( `# W' s8 }) O6 F FullScreen: 属 性(Boolean), 是 否 全 屏 显 示。
& p0 L6 x6 e" l( l Offline: 属 性(Boolean), 是 否 脱 机 浏 览。4 q$ @/ X' u2 d+ B9 B( ]# y. I2 D! q* d
AddressBar: 属 性(Boolean), 是 否 显 示 地 址 栏。 3 M) s+ R9 C1 c( ^6 ^
----TWebBrowser 的 常 见 事 件 主 要 有:
L, M3 w" R" r/ z5 a @5 p6 k----OnStatusTextChange = procedure(Sender: TObject; const Text: WideString) of object;
; r) B# C5 ~/ ^* C# i, M) J----在 状 态 栏 提 示 信 息 变 化 时 发 生, 参 数 Text 为 当 前 状 态 栏 提 示 信 息, 我 们 可 以 根 据 该 信 息 来 更 新 我 们 自 己 的 状 态 栏 提 示 信 息 或 处 理 其 它 的 事 务。 5 U, ?! \7 o7 Q/ S7 K
----OnProgressChange = procedure(Sender: TObject; Progress, ProgressMax: Integer) of object; , e' V8 \ ` C* |
----在 打 开 页 面 的 进 度 变 化 时 发 生, 参 数 Progress 为 当 前 进 度,ProgressMax 为 总 进 度, 我 们 可 以 根 据 这 两 个 参 数 来 更 新 我 们 自 己 的 状 态 栏 提 示 信 息 或 处 理 其 它 的 事 务。 9 O1 i$ ^- [! s5 e9 ^/ a# H* c
OnCommandStateChange = procedure(Sender: - G) |, u- U) M+ a( x
TObject; Command: Integer; Enable: WordBool) of object;
# ^) j/ d. T, ~8 [----当 执 行 新 的 命 令 时 发 生,Command 为 命 令 标 识,Enable 为 是 否 允 许 执 行 该 命 令。 4 g# s' v; x& W8 O$ }* ?1 N, Y$ N
OnTitleChange = procedure(Sender: TObject;# |* j7 h- x; p+ g4 Z) x
const Text: WideString) of object; / z8 T# u' C# z0 g$ @, `
----在 页 面 的 标 题 发 生 变 化 时 发 生,Text 为 当 前 标 题。
. `8 ~8 J4 \9 F/ d OnPropertyChange = procedure(Sender: TObject;
3 j4 \" {5 {9 z4 h' a% Y6 d' L) J const Property_: WideString) of object; . g: _0 V1 n o
----在 页 面 的 属 性 发 生 变 化 时 发 生,Property_ 为 属 性 名 称 ; N9 f& j: H# F/ b3 w% o
OnDownloadComplete: TNotifyEvent
+ A. C* x6 H: T9 S& L g 在 下 载 页 面 完 成 后 发 生。
* r/ [6 P( U6 v: M% o OnDownloadBegin: TNotifyEvent7 O2 J, j5 G( {( a w0 j
在 下 载 页 面 开 始 前 发 生。
3 q4 r7 ]* ~) h8 i. ]8 w% X! {0 Q. q6 W三、 两 个 例 子 - T7 }# O4 m. Z- |+ C" @
----1. 制 作 自 己 的 帮 助 系 统
; f( y- |! d4 r+ [----我 们 利 用IE 浏 览 器 控 件 为 用 户 制 作 了 一 个 帮 助 系 统, 帮 助 文 件 由 多 个HTML 文 件 组 成, 一 个 主 题 对 应 一 个 HTML 文 件(Topic.HTM), 每 个 主 题 下 的 项 目 对 应HTML 文 件 中 的 一 个 标 签( #Item)。 这 样 在 我 们 的 系 统 中, 就 不 必 再 调 用IE 浏 览 器 或 WinHelp 程 序 来 为 用 户 提 供 帮 助 了。 相 信 大 家 知 道HTML 帮 助 文 件 与 传 统 的HLP 帮 助 文 件 相 比 的 优 势 所 在 吧。
, @( f g8 m, i. r! Z' X, k9 X. ]----在 下 面 例 子 中, 演 示 了TWebBrowser(IE4 浏 览 器 控 件) 的Navigate 方 法 的 使 用 方 法。 请 注 意 程 序 中 的 注 释。 下 面 为 程 序 的 主 要 片 段。{ 根 据 主 题 和 项 目 调 用 帮 助 文 件} 1 n J# V6 T& ]9 y5 r" u5 }
procedure ShowHelp( HelpTopic,HelpItem : String );
% M2 |. B1 U3 _. X- R( Lvar
$ c. @( M$ b5 M3 J TargetFrameName,PostData,Heads,Flags : OleVariant;3 c3 U: s/ r/ t6 F8 m
URL : widestring;
) H/ S! r2 I7 Mbegin. i2 ]3 \5 M9 w( N, E, u' w8 y* o
TargetFrameName := '';" M! T) i7 }' J) x6 t
{ 指 定Frame 的 空 字 符 串 时, * r# _8 h; L/ N1 a9 d
则 在 当 前Frame 中 打 开 帮 助 文 件}
0 J2 G5 u0 A! q PostData := false;{ 不 发 送 数 据}( ~7 h i# c% b# {% u
Heads := '';{Header 信 息 为 空}: \) j, [* X" [/ u8 |- y
Flags := 0;{Flags 设 为0}
2 d |( i8 a( T2 {3 t5 ] URL := HelpTopic + '.HTM #' +HelpItem;7 Q' D1 @$ K9 O L8 y/ T+ G( ]
{ 帮 助 信 息 的URL}( V; O# ]6 e% f$ M$ h
with formHelp.webbrowser do' O- U2 d( z+ e3 }3 n8 c) D. p
{ 在 帮 助 窗 口 中 的IE 浏 览 器$ q: X: D; H- `8 t; a
控 件 中 显 示 帮 助 信 息}* Z$ G E1 ` v6 _& \
begin% @: Y9 ]7 S2 S& d& I" X
navigate(URL,Flags,TargetFrameName,
: f* |) |, v8 i ^6 SPostData,Heads);{ 显 示 帮 助 信 息}/ P9 @- l: [3 C# a- {
end;. Z/ i# l7 h* C& P, Y: V8 {
end; % N! M8 f5 n6 `7 ^
----2. 显 示 一 个GIF 动 画 * a) ]( {+ e& S5 E" x+ V. Z
----假 如 你 还 没 有 一 个 适 合 的 动 画 显 示 控 件, 不 妨 试 用 一 下 下 面 的 方 法。
+ x* O: X: Y8 Y% ^: Y1 I: X; B pprocedure ShowGIF( GIFFileName : String );2 R; w3 Y$ s _# S
var4 f, G- M, M8 T; z; U" P+ u. X' _
TargetFrameName,PostData,Heads,Flags : OleVariant;5 a- n, S2 f. B
URL : widestring;4 |8 Y o* ], @
begin
( z( I. l( j4 \) y- M$ K& E9 X TargetFrameName := '';
6 y% Y' h" `* \ { 指 定Frame 的 空 字 符 串 时, 9 Y5 N ~8 k8 j: Q& w* K
则 在 当 前Frame 中 打 开 动 画 文 件}
* l. n% K5 l% B" f$ r4 Z; g- d PostData := false;{ 不 发 送 数 据}
s+ D' j6 u0 {0 N5 }" E: M Heads := '';{Header 信 息 为 空}7 f, U+ t% m% k: l( M
Flags := 0;{Flags 设 为0}
5 o. Q0 c& [- ]5 q5 `7 \ URL := GIFFileName;# U; `* W& I0 Y4 `# D( V6 ~2 c
with formGIF.webbrowser do0 c& p a. v$ k5 f. {
{ 在 指 定 窗 口 中 的IE 浏 览 器 控 件 中 显 示 动 画}
" J* `# A$ a2 c' C( I5 D- e begin* ]7 g# x- d& {
navigate(URL,Flags,TargetFrameName,Post ?) l* U! m. w% T) q: y( K
Data,Heads);{ 显 示 动 画 文 件}" M+ ]; \4 ?( x2 b
end;9 u R4 Z+ w+ W$ L# C
end; * o3 _1 j0 v9 x+ X" x9 H" D! G
---- 以 上 程 序 在PWIN98 +Delphi3.0 下 调 试 通 过。
% o2 V& e( b% z$ I, T) J, b7 J+ B( @ |