|
U; Q M8 F7 P5 M% }, u深 圳 市 邮 政 储 汇 局(518040)3 t. c @- C6 k+ O/ V0 D" Z
王 发 军 , Z# V3 i# M# Y1 W& {
-------------------------------------------------------------------------------- 3 U& E4 T0 ^9 i q
一、 在Delphi 中 引 入IE 浏 览 器 控 件 # X! g% G' K9 E) O, C/ S! @! E0 b2 w
---- 由 于IE 浏 览 器 控 件 需 要 提 供 显 示 功 能 才 能 使 用, 所 以 不 能 在 程 序 中 用CreateOleObject 取 得 一 个 实 例 后 直 接 使 用 其 属 性 和 方 法, 否 则 程 序 在 运 行 时 会 引 起 错 误; 这 时 需 要 用Delphi 中 提 供 的"Import ActiveX Control" 功 能, 操 作 方 法 如 下 所 述。 u; X$ z# 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, 其 中 有 这 三 个 控 件 的 包 装 细 节, 当 然 含 控 件 的 属 性 和 方 法 说 明 了, 它 可 以 作 为 我 们 使 用 控 件 的 参 考 资 料。 * b' v, m! C" T7 _
二、 使 用IE 浏 览 器 控 件 ' Q4 T2 M I6 ?7 D# R$ Z3 R0 W
----以TWebBrowser(IE4 浏 览 器 控 件) 为 例 子。 & i% ~/ h* J# ?2 `# V8 X
----TWebBrowser 的 常 见 属 性 和 方 法 主 要 有:
: w6 Y/ C3 [+ W0 e' k7 ?0 R8 L; K GoBack: 方 法, 后 退 到 上 一 个 页 面。
/ h& {& n) k7 ]) n' C5 R+ L+ R GoForward: 方 法, 前 进 到 下 一 个 页 面。6 }! T. U f; [ k! m( G
GoHome: 方 法, 调 用 默 认 的 主 页 页 面,
2 H1 L, z7 X) z$ q# [1 z 该 页 面 在IE 的 选 项 中 设 定。( G3 X6 z: {5 T* z5 O7 B
GoSearch: 方 法, 调 用 默 认 的 搜 索 页 面,
) ^+ o4 c0 A5 g# ^ 该 页 面 在IE 的 选 项 中 设 定。
$ V9 M0 G+ d3 K. P! Z) l---- Navigate(const URL: WideString; var Flags, TargetFrameName, PostData, Headers: OleVariant):方 法, 调 用 指 定 页 面, 具 体 参 数 如 下:
2 f/ _ W h8 a* l URL: 指 定 页 面 的URL。6 r5 N, D$ `' e! ]( f3 r1 x3 k
Flags:Word 类 型, 作 用 还 不 清 楚,
, } ^7 Z" D) G$ _ 可 设 为0。
+ Q& N$ ~, X5 ~---- TargetFrameName:WideString, 打 开 页 面 所 在 的Frame, 为 空 字 符 串 时 在 当 前 的Frame 中 打 开;TargetFrameName 指 定 的 Frame 存 在 时 在Frame 中 打 开;
- h. F" Q3 ?8 E----TargetFrameName 指 定 的Frame 不 存 在 时 则 新 建 一 个 窗 口 打 开, 此 时 就 相 当 于 调 用 外 部 的IE 浏 览 器 了。
' @ S+ W! i, r5 I PostData:boolean, 是 否 允 许 发 送 数 据。
0 E7 ?! I* I6 W Headers:WideString,
/ l/ Z4 F- o3 m6 ?( ~$ j& |) d 要 发 送 的URL 请 求 的 头 部 数 据。( Y% u8 q2 c$ p2 m9 a
Refresh: 方 法, 刷 新 当 前 页 面。/ c1 {" _' n7 j& I7 D. j
Stop: 方 法, 停 止 调 用 或 打 开 当 前 页 面。
8 S0 Y ^% f2 P- Q$ s LocationName: 属 性(WideString), 当 前 位 置 的 名 称。$ {& H4 C: J6 q# c+ ~. ~, B
LocationURL: 属 性(WideString), 当 前 位 置 的URL。
* W& v$ {" J% g+ \/ e8 f* \ Busy: 属 性(Boolean), 是 否 正 忙。
8 u9 _4 b6 |6 f: z3 M# z4 W% _ Visible: 属 性(Boolean), 浏 览 器 窗 口 是 否 可 见。 0 ` @% x. I, k& m: F, a! o
---- ( 以 下 属 性 为 在TWebBrowser 新 增, TWebBrowser_V1 中 没 有, 其 作 用 有 待 探 索)
* C4 F) e; W; H! j8 B3 ] K# m2 e StatusBar: 属 性(Boolean), 是 否 显 示 状 态 栏。
0 s3 ]+ T6 ^, H& h0 V- f StatusText: 属 性(WideString), 状 态 栏 内 容。& D* p* m* c$ _! k1 I" g- j a
ToolBar: 属 性(SYSINT), 工 具 栏 中 的 内 容。* l" ]/ k Y5 k
MenuBar: 属 性(Boolean), 是 否 显 示 菜 单 条。
0 \% c5 o3 r; P: s FullScreen: 属 性(Boolean), 是 否 全 屏 显 示。* x9 w2 \. c8 y
Offline: 属 性(Boolean), 是 否 脱 机 浏 览。8 w% C7 A9 x7 I) |- X5 Q* h
AddressBar: 属 性(Boolean), 是 否 显 示 地 址 栏。
$ x- T, m8 C7 h" x2 e D1 y, }; U----TWebBrowser 的 常 见 事 件 主 要 有:
" A! R& c/ {! }: O- p----OnStatusTextChange = procedure(Sender: TObject; const Text: WideString) of object;
6 P7 j9 s" Q5 b1 Z% Y/ Y----在 状 态 栏 提 示 信 息 变 化 时 发 生, 参 数 Text 为 当 前 状 态 栏 提 示 信 息, 我 们 可 以 根 据 该 信 息 来 更 新 我 们 自 己 的 状 态 栏 提 示 信 息 或 处 理 其 它 的 事 务。 * [1 C) N) B, [
----OnProgressChange = procedure(Sender: TObject; Progress, ProgressMax: Integer) of object;
. X: C& e& u: I. z7 A----在 打 开 页 面 的 进 度 变 化 时 发 生, 参 数 Progress 为 当 前 进 度,ProgressMax 为 总 进 度, 我 们 可 以 根 据 这 两 个 参 数 来 更 新 我 们 自 己 的 状 态 栏 提 示 信 息 或 处 理 其 它 的 事 务。 + U2 q/ F, r9 p
OnCommandStateChange = procedure(Sender:
3 D c! c# o) m8 E/ {( MTObject; Command: Integer; Enable: WordBool) of object; 1 p4 v! G# [& c' }- s! E/ p
----当 执 行 新 的 命 令 时 发 生,Command 为 命 令 标 识,Enable 为 是 否 允 许 执 行 该 命 令。 , ^8 Q# Q$ [0 h: q
OnTitleChange = procedure(Sender: TObject;1 N# Q/ ^1 Y* X9 u
const Text: WideString) of object;
. _- e4 R( n) Y. J+ D----在 页 面 的 标 题 发 生 变 化 时 发 生,Text 为 当 前 标 题。
$ d1 h$ p9 D& ]- M7 u2 O OnPropertyChange = procedure(Sender: TObject;
( {9 F0 P% H: N/ ^. Y const Property_: WideString) of object;
" ^) B8 P: M0 o9 ^ ^----在 页 面 的 属 性 发 生 变 化 时 发 生,Property_ 为 属 性 名 称 % m. I# ?* X" W7 R: N
OnDownloadComplete: TNotifyEvent
/ _+ ]/ A- \# v, @ 在 下 载 页 面 完 成 后 发 生。: h x4 Z! }2 | r% r
OnDownloadBegin: TNotifyEvent3 ~! k$ G: S. l1 D& ]& v2 F
在 下 载 页 面 开 始 前 发 生。
2 K! Y9 U2 x; s e% O7 p% I r三、 两 个 例 子 " b' g0 f& O1 ^7 u7 Z
----1. 制 作 自 己 的 帮 助 系 统 / Z' x4 O( K0 p
----我 们 利 用IE 浏 览 器 控 件 为 用 户 制 作 了 一 个 帮 助 系 统, 帮 助 文 件 由 多 个HTML 文 件 组 成, 一 个 主 题 对 应 一 个 HTML 文 件(Topic.HTM), 每 个 主 题 下 的 项 目 对 应HTML 文 件 中 的 一 个 标 签( #Item)。 这 样 在 我 们 的 系 统 中, 就 不 必 再 调 用IE 浏 览 器 或 WinHelp 程 序 来 为 用 户 提 供 帮 助 了。 相 信 大 家 知 道HTML 帮 助 文 件 与 传 统 的HLP 帮 助 文 件 相 比 的 优 势 所 在 吧。 , ~& l9 k2 j0 X- ~
----在 下 面 例 子 中, 演 示 了TWebBrowser(IE4 浏 览 器 控 件) 的Navigate 方 法 的 使 用 方 法。 请 注 意 程 序 中 的 注 释。 下 面 为 程 序 的 主 要 片 段。{ 根 据 主 题 和 项 目 调 用 帮 助 文 件} - Y# q7 C# s- u# p5 f# B
procedure ShowHelp( HelpTopic,HelpItem : String );) m7 H3 \5 J) w7 @& G6 ?
var1 W/ y( A# [; @- [8 B2 a8 |' n
TargetFrameName,PostData,Heads,Flags : OleVariant;0 c3 J6 S3 ?/ D& `1 D- f
URL : widestring;. A& g8 ?+ h% I, _/ ^" T! s$ o
begin
3 S6 \/ w# n; S! \% G+ | TargetFrameName := '';5 z# x+ S' Z5 x/ ]+ j; s6 l; C4 n
{ 指 定Frame 的 空 字 符 串 时, * O$ V: l* k1 A8 E" z1 p3 }5 n* k+ Z
则 在 当 前Frame 中 打 开 帮 助 文 件}: B! B5 f) U! h" f" O, g% W4 U
PostData := false;{ 不 发 送 数 据}7 C- u4 Y, _0 d; T# v
Heads := '';{Header 信 息 为 空}% v X! [$ p3 [2 k2 A! I* H8 ~
Flags := 0;{Flags 设 为0}
4 B- v1 b) m. N- m URL := HelpTopic + '.HTM #' +HelpItem;
4 N; x6 L$ [. U6 q { 帮 助 信 息 的URL}
# ^# j% N, A1 N2 }, _5 Z0 [! O' Q7 | with formHelp.webbrowser do
' n5 _9 p! R: `8 w { 在 帮 助 窗 口 中 的IE 浏 览 器
+ O4 n8 ?2 @: e' e 控 件 中 显 示 帮 助 信 息}
0 f! g7 e# C+ D4 \# j begin0 H( F" M' n# q% a
navigate(URL,Flags,TargetFrameName,* z9 A0 x9 y; |1 M6 k
PostData,Heads);{ 显 示 帮 助 信 息}
! Y8 T" _; R5 z$ N0 y end;
8 u9 l) C! ?8 t) F* xend; ' }5 J/ `3 z4 M1 {2 F
----2. 显 示 一 个GIF 动 画 2 N, }$ j# f1 F( E6 n
----假 如 你 还 没 有 一 个 适 合 的 动 画 显 示 控 件, 不 妨 试 用 一 下 下 面 的 方 法。
! I) r$ u5 z" s. \* gprocedure ShowGIF( GIFFileName : String );6 }$ _! V* u6 u6 a' G
var
$ O7 |5 c! X2 E! m: M2 u TargetFrameName,PostData,Heads,Flags : OleVariant;
) ~6 t; K$ ]: e0 [4 ? URL : widestring;
3 \# ?0 N0 [9 d7 m9 ~" kbegin8 ~7 Q5 d5 k, g% i3 ?* c8 o
TargetFrameName := '';
N7 k+ Z6 ~- F- h1 t5 w0 ? { 指 定Frame 的 空 字 符 串 时, ! ?+ X: L' c0 k; V: g3 Z) [5 l
则 在 当 前Frame 中 打 开 动 画 文 件}% b: y& g/ K. N2 T! Q$ V
PostData := false;{ 不 发 送 数 据}/ {% W ^1 K4 t" L$ j' ~+ @) d
Heads := '';{Header 信 息 为 空}& X) ^; x% f. l$ z& C
Flags := 0;{Flags 设 为0}! R9 _0 |5 ^+ b# N: v2 i
URL := GIFFileName;
* m/ Y) ^, G4 I5 |: D with formGIF.webbrowser do
5 k; _2 l q& n9 H( d# E{ 在 指 定 窗 口 中 的IE 浏 览 器 控 件 中 显 示 动 画}( Z- `6 h6 W% t1 |4 o
begin
2 y1 d* ~6 ?& F$ T navigate(URL,Flags,TargetFrameName,Post ?
. ?* p: W5 c8 Z! @) OData,Heads);{ 显 示 动 画 文 件}
4 R. B6 G1 B3 j: n8 \9 x1 J end;
% o- N- h; H( pend;
4 C% X; p3 L# E1 L---- 以 上 程 序 在PWIN98 +Delphi3.0 下 调 试 通 过。 $ _7 H0 m. _' V3 B: l
|