|
$ Y- C7 ]/ i% C& g7 G
深 圳 市 邮 政 储 汇 局(518040): {# j! f7 m" z& L, Z
王 发 军
) j. l4 ]8 b* q( E' B, S-------------------------------------------------------------------------------- - u$ f5 v# T' k
一、 在Delphi 中 引 入IE 浏 览 器 控 件
8 t' T0 J4 p2 a% Z" c2 ]% T---- 由 于IE 浏 览 器 控 件 需 要 提 供 显 示 功 能 才 能 使 用, 所 以 不 能 在 程 序 中 用CreateOleObject 取 得 一 个 实 例 后 直 接 使 用 其 属 性 和 方 法, 否 则 程 序 在 运 行 时 会 引 起 错 误; 这 时 需 要 用Delphi 中 提 供 的"Import ActiveX Control" 功 能, 操 作 方 法 如 下 所 述。 / U+ \& T2 E- I1 U" Z
----在"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, 其 中 有 这 三 个 控 件 的 包 装 细 节, 当 然 含 控 件 的 属 性 和 方 法 说 明 了, 它 可 以 作 为 我 们 使 用 控 件 的 参 考 资 料。
# x* Z6 r: i! M二、 使 用IE 浏 览 器 控 件
6 v" @# i6 S- ^+ U6 Q5 z----以TWebBrowser(IE4 浏 览 器 控 件) 为 例 子。
7 R5 Q$ m8 I1 b T8 K# h/ v, U----TWebBrowser 的 常 见 属 性 和 方 法 主 要 有: 6 b9 X5 h: S( @5 }2 D8 i, v
GoBack: 方 法, 后 退 到 上 一 个 页 面。9 O6 F8 [2 O. T1 _( _" N
GoForward: 方 法, 前 进 到 下 一 个 页 面。7 Y5 _+ j4 P8 k0 j* ^
GoHome: 方 法, 调 用 默 认 的 主 页 页 面,
3 h/ ], [; K. E; j 该 页 面 在IE 的 选 项 中 设 定。3 r3 a7 v1 } n' V
GoSearch: 方 法, 调 用 默 认 的 搜 索 页 面,
R$ C! M2 L) [$ E4 W2 J 该 页 面 在IE 的 选 项 中 设 定。 + B5 y [4 o8 a5 @7 J7 f2 z
---- Navigate(const URL: WideString; var Flags, TargetFrameName, PostData, Headers: OleVariant):方 法, 调 用 指 定 页 面, 具 体 参 数 如 下: + I$ t7 a) [2 A
URL: 指 定 页 面 的URL。0 {6 [, U! C; v' A+ N1 n: @4 `0 t
Flags:Word 类 型, 作 用 还 不 清 楚,
9 G9 C/ w( X) `: c" T 可 设 为0。
9 t. t2 Y/ P, D$ P. H---- TargetFrameName:WideString, 打 开 页 面 所 在 的Frame, 为 空 字 符 串 时 在 当 前 的Frame 中 打 开;TargetFrameName 指 定 的 Frame 存 在 时 在Frame 中 打 开;
! U8 x4 g% B: x0 T----TargetFrameName 指 定 的Frame 不 存 在 时 则 新 建 一 个 窗 口 打 开, 此 时 就 相 当 于 调 用 外 部 的IE 浏 览 器 了。
9 p& @- N; T2 W+ T( g PostData:boolean, 是 否 允 许 发 送 数 据。. _. t p: L+ S7 } m" D
Headers:WideString,
* y% \9 |* X; |, J! n U! S1 V 要 发 送 的URL 请 求 的 头 部 数 据。; D! ?2 F; i$ b, m+ ~; M$ G/ ?
Refresh: 方 法, 刷 新 当 前 页 面。: l5 O9 I+ `7 C
Stop: 方 法, 停 止 调 用 或 打 开 当 前 页 面。$ K; K% W4 |$ [
LocationName: 属 性(WideString), 当 前 位 置 的 名 称。
" C; a1 S* c2 F$ h, j" z/ l' b LocationURL: 属 性(WideString), 当 前 位 置 的URL。7 r2 c& d# H7 b3 a5 I
Busy: 属 性(Boolean), 是 否 正 忙。: T5 [% m& s7 \0 M& R s* |
Visible: 属 性(Boolean), 浏 览 器 窗 口 是 否 可 见。
, B: j. [, @! p---- ( 以 下 属 性 为 在TWebBrowser 新 增, TWebBrowser_V1 中 没 有, 其 作 用 有 待 探 索) 6 k8 I6 j$ @7 T% P+ F
StatusBar: 属 性(Boolean), 是 否 显 示 状 态 栏。
: e6 e% j! f& X) A StatusText: 属 性(WideString), 状 态 栏 内 容。
6 ^ v$ O! N' B p ToolBar: 属 性(SYSINT), 工 具 栏 中 的 内 容。5 [3 B+ j! r$ Z: Z F
MenuBar: 属 性(Boolean), 是 否 显 示 菜 单 条。
' P) H# {6 u3 T FullScreen: 属 性(Boolean), 是 否 全 屏 显 示。) A$ u1 ?& p9 p4 @
Offline: 属 性(Boolean), 是 否 脱 机 浏 览。
; S# N+ V) [4 A( w1 P AddressBar: 属 性(Boolean), 是 否 显 示 地 址 栏。 2 k& t1 o# E9 h% t$ T* ?$ N
----TWebBrowser 的 常 见 事 件 主 要 有:
7 N% T* c5 g |9 V: d' \----OnStatusTextChange = procedure(Sender: TObject; const Text: WideString) of object; 5 ^% W5 T( S$ L7 G5 z: c
----在 状 态 栏 提 示 信 息 变 化 时 发 生, 参 数 Text 为 当 前 状 态 栏 提 示 信 息, 我 们 可 以 根 据 该 信 息 来 更 新 我 们 自 己 的 状 态 栏 提 示 信 息 或 处 理 其 它 的 事 务。
\+ F. ]/ ?9 B----OnProgressChange = procedure(Sender: TObject; Progress, ProgressMax: Integer) of object;
4 G9 Z& B5 g- h( n1 G----在 打 开 页 面 的 进 度 变 化 时 发 生, 参 数 Progress 为 当 前 进 度,ProgressMax 为 总 进 度, 我 们 可 以 根 据 这 两 个 参 数 来 更 新 我 们 自 己 的 状 态 栏 提 示 信 息 或 处 理 其 它 的 事 务。 # |' `& X. r. t; _
OnCommandStateChange = procedure(Sender:
4 |; Z8 D! b6 jTObject; Command: Integer; Enable: WordBool) of object; 8 K" x1 Z; ~% R8 l5 A# i7 Y
----当 执 行 新 的 命 令 时 发 生,Command 为 命 令 标 识,Enable 为 是 否 允 许 执 行 该 命 令。
. K- r$ C: I5 V# S OnTitleChange = procedure(Sender: TObject;
6 c) H4 j+ W7 U3 \9 Z* D! G const Text: WideString) of object; S8 g7 b+ L; u, P1 S
----在 页 面 的 标 题 发 生 变 化 时 发 生,Text 为 当 前 标 题。 * x3 s9 ~3 n& ?% D
OnPropertyChange = procedure(Sender: TObject;4 T+ r; p7 g9 x6 R9 z
const Property_: WideString) of object;
# A- V1 i, |, y' L----在 页 面 的 属 性 发 生 变 化 时 发 生,Property_ 为 属 性 名 称 3 _7 f7 A0 i* s1 f
OnDownloadComplete: TNotifyEvent
# {* ?+ L. i' u 在 下 载 页 面 完 成 后 发 生。+ c1 n0 t- ~ b k
OnDownloadBegin: TNotifyEvent
& F0 `+ [+ a H" t# h3 q/ S. d 在 下 载 页 面 开 始 前 发 生。
& H3 Q" B. w; g; H$ F三、 两 个 例 子
6 X8 i. D0 Y! h* j7 C) w----1. 制 作 自 己 的 帮 助 系 统 + b A( O( }2 ` A
----我 们 利 用IE 浏 览 器 控 件 为 用 户 制 作 了 一 个 帮 助 系 统, 帮 助 文 件 由 多 个HTML 文 件 组 成, 一 个 主 题 对 应 一 个 HTML 文 件(Topic.HTM), 每 个 主 题 下 的 项 目 对 应HTML 文 件 中 的 一 个 标 签( #Item)。 这 样 在 我 们 的 系 统 中, 就 不 必 再 调 用IE 浏 览 器 或 WinHelp 程 序 来 为 用 户 提 供 帮 助 了。 相 信 大 家 知 道HTML 帮 助 文 件 与 传 统 的HLP 帮 助 文 件 相 比 的 优 势 所 在 吧。 2 M9 o7 k# N& E+ d- [
----在 下 面 例 子 中, 演 示 了TWebBrowser(IE4 浏 览 器 控 件) 的Navigate 方 法 的 使 用 方 法。 请 注 意 程 序 中 的 注 释。 下 面 为 程 序 的 主 要 片 段。{ 根 据 主 题 和 项 目 调 用 帮 助 文 件} . ~( u: L( m$ m) t
procedure ShowHelp( HelpTopic,HelpItem : String );
9 ~6 n5 b2 i& }1 ?var
, G: a; G" F4 Q3 H8 W. \ TargetFrameName,PostData,Heads,Flags : OleVariant;
% w" ]/ i& ]) [1 h5 O URL : widestring;- A9 m) X$ Z5 r" t2 l
begin9 g, W. d. F( e
TargetFrameName := '';
5 K3 l4 t! l- f { 指 定Frame 的 空 字 符 串 时,
' T! L8 L. z; z. o5 P: N6 t 则 在 当 前Frame 中 打 开 帮 助 文 件}
. l6 K; C! b7 e; X/ b( `+ O* o PostData := false;{ 不 发 送 数 据}2 X! O, L& I" e. X, e3 @# [0 V
Heads := '';{Header 信 息 为 空}
, H9 B' U' o$ \- | Flags := 0;{Flags 设 为0}
& |0 U2 V. q# K' M URL := HelpTopic + '.HTM #' +HelpItem;' Q* d3 x2 H& o1 F& |1 `
{ 帮 助 信 息 的URL}* V& ?: L! N: f# ?
with formHelp.webbrowser do F2 n; S7 u1 i. d% }2 p( _
{ 在 帮 助 窗 口 中 的IE 浏 览 器 v# E% N' q1 W' W- c- l; x4 l
控 件 中 显 示 帮 助 信 息}
* I% t# Y: o6 S) r5 E( Q begin2 ~7 S, Y: a8 `4 [8 o" A/ G6 i, ^6 B4 y
navigate(URL,Flags,TargetFrameName,+ ~* T0 h9 ]* |
PostData,Heads);{ 显 示 帮 助 信 息}' l$ X2 o, R. |$ b7 T! F: Y
end;8 N' P- Y) \9 `. F* ]/ p" z
end; * b& I4 e, h6 A) [! n8 d. K2 u
----2. 显 示 一 个GIF 动 画 * k; c: O/ }/ U2 q" Y
----假 如 你 还 没 有 一 个 适 合 的 动 画 显 示 控 件, 不 妨 试 用 一 下 下 面 的 方 法。 1 n' g9 l' x3 K$ R0 t
procedure ShowGIF( GIFFileName : String );* t; z Q& p* O9 G$ @
var
3 V3 a; M B/ k3 I& r! _ TargetFrameName,PostData,Heads,Flags : OleVariant;9 t- M2 f8 k7 T/ y& W
URL : widestring;0 E C# ?- D' m1 R+ \
begin: O' b" {' a d6 K: h
TargetFrameName := '';
7 w/ x# r; ]+ T( W6 c! E { 指 定Frame 的 空 字 符 串 时, 2 D% `7 [5 g5 `& y4 s9 d
则 在 当 前Frame 中 打 开 动 画 文 件}
- ]+ G. @4 r3 n6 U" c PostData := false;{ 不 发 送 数 据}1 c! g' `% k' S
Heads := '';{Header 信 息 为 空}
+ Q1 R% L2 p, J$ a Flags := 0;{Flags 设 为0}
% Z; V. ~/ V7 i! ?+ | URL := GIFFileName;3 M$ @: i( z8 l' j; @3 u. ?5 B7 ?1 r
with formGIF.webbrowser do
6 j8 s4 e8 c6 N9 p9 U- y' s{ 在 指 定 窗 口 中 的IE 浏 览 器 控 件 中 显 示 动 画}
4 B% h7 K, r! R begin* F2 g) L7 L, y, {; S% W
navigate(URL,Flags,TargetFrameName,Post ?' U# m% D$ t- Q5 F( Y5 w
Data,Heads);{ 显 示 动 画 文 件}0 t L6 e1 r2 @* v
end;( Z" _$ i _: p; Y
end;
+ a; {7 d( |3 D& p5 p: P---- 以 上 程 序 在PWIN98 +Delphi3.0 下 调 试 通 过。 # @0 K6 H8 l* U% }9 t2 p
|