|
+ b) {2 p4 R9 u3 _' c4 ]* T4 H. j1 M" S深 圳 市 邮 政 储 汇 局(518040)
$ H! M. G/ j- i7 r/ y王 发 军 7 H, G I& U2 Z
--------------------------------------------------------------------------------
" i, k# ^6 i I0 o7 z# ]一、 在Delphi 中 引 入IE 浏 览 器 控 件
, z" P2 l5 z H( o---- 由 于IE 浏 览 器 控 件 需 要 提 供 显 示 功 能 才 能 使 用, 所 以 不 能 在 程 序 中 用CreateOleObject 取 得 一 个 实 例 后 直 接 使 用 其 属 性 和 方 法, 否 则 程 序 在 运 行 时 会 引 起 错 误; 这 时 需 要 用Delphi 中 提 供 的"Import ActiveX Control" 功 能, 操 作 方 法 如 下 所 述。
|' F M5 n- S7 |) `: B----在"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, 其 中 有 这 三 个 控 件 的 包 装 细 节, 当 然 含 控 件 的 属 性 和 方 法 说 明 了, 它 可 以 作 为 我 们 使 用 控 件 的 参 考 资 料。
$ m1 h7 U8 Z" |" \二、 使 用IE 浏 览 器 控 件 ( x3 g3 m1 D0 ~4 i. F8 V% s7 {/ }7 [3 D
----以TWebBrowser(IE4 浏 览 器 控 件) 为 例 子。
0 d% i" \: h) g- T$ U----TWebBrowser 的 常 见 属 性 和 方 法 主 要 有: ) I: [, [3 c. q$ y8 S& w. C) s$ U, ~
GoBack: 方 法, 后 退 到 上 一 个 页 面。' D- L7 ?7 G% R3 F6 f, n
GoForward: 方 法, 前 进 到 下 一 个 页 面。. z- ?; {5 I w
GoHome: 方 法, 调 用 默 认 的 主 页 页 面,
7 H- ]0 f5 i( n/ }/ X& X1 h8 X 该 页 面 在IE 的 选 项 中 设 定。
$ I! d1 s' U: h7 g4 j! u GoSearch: 方 法, 调 用 默 认 的 搜 索 页 面, ( `- K1 F* [; l z
该 页 面 在IE 的 选 项 中 设 定。 9 b; Z9 y& o& I6 ?0 h7 D }0 I
---- Navigate(const URL: WideString; var Flags, TargetFrameName, PostData, Headers: OleVariant):方 法, 调 用 指 定 页 面, 具 体 参 数 如 下: 8 \6 _- |, J( S. X1 \
URL: 指 定 页 面 的URL。
+ |* T' ]4 }( S$ Y. p: J6 c. W Flags:Word 类 型, 作 用 还 不 清 楚,
6 Z6 M* P* q+ @) m9 b3 ~0 J/ I 可 设 为0。 . Y; V# w3 [$ \% I8 L
---- TargetFrameName:WideString, 打 开 页 面 所 在 的Frame, 为 空 字 符 串 时 在 当 前 的Frame 中 打 开;TargetFrameName 指 定 的 Frame 存 在 时 在Frame 中 打 开; ~! |* F4 [& X; m5 c1 y4 Q. |
----TargetFrameName 指 定 的Frame 不 存 在 时 则 新 建 一 个 窗 口 打 开, 此 时 就 相 当 于 调 用 外 部 的IE 浏 览 器 了。 ! ^1 S* t& s$ _" c7 ^! V; \
PostData:boolean, 是 否 允 许 发 送 数 据。
4 ~6 F8 a9 j9 u2 W* D' p1 ? Headers:WideString,3 O; ~1 @+ T5 e5 g8 {4 S9 H
要 发 送 的URL 请 求 的 头 部 数 据。
% C$ M! n( L D: O4 H Refresh: 方 法, 刷 新 当 前 页 面。
) q2 j! Z. V, N# w: B4 Z/ V' l1 ` Stop: 方 法, 停 止 调 用 或 打 开 当 前 页 面。
. O; y2 B, d+ S6 S+ q LocationName: 属 性(WideString), 当 前 位 置 的 名 称。8 R3 q/ E- \) g5 ]: O) `+ ^
LocationURL: 属 性(WideString), 当 前 位 置 的URL。
/ c5 n1 _) g7 ^( q Busy: 属 性(Boolean), 是 否 正 忙。2 @! a) O: O! r' d* |: }4 N
Visible: 属 性(Boolean), 浏 览 器 窗 口 是 否 可 见。 ) X, j9 M9 \: c/ i) u9 a8 G& U
---- ( 以 下 属 性 为 在TWebBrowser 新 增, TWebBrowser_V1 中 没 有, 其 作 用 有 待 探 索)
# l# A4 T5 L9 x1 g1 C4 q% T( f+ \7 ` StatusBar: 属 性(Boolean), 是 否 显 示 状 态 栏。: K E3 [' k7 I' j
StatusText: 属 性(WideString), 状 态 栏 内 容。
6 o2 Q$ R y& E ToolBar: 属 性(SYSINT), 工 具 栏 中 的 内 容。4 m+ ~ |, {3 s! T/ ]6 r
MenuBar: 属 性(Boolean), 是 否 显 示 菜 单 条。
8 S5 s8 Y4 c! w6 n FullScreen: 属 性(Boolean), 是 否 全 屏 显 示。7 o0 q! e# O. D
Offline: 属 性(Boolean), 是 否 脱 机 浏 览。& u8 O& Y _: A7 O% o+ A- X/ d0 p
AddressBar: 属 性(Boolean), 是 否 显 示 地 址 栏。
% x7 E7 W2 c5 ]( w" Y9 ?& m1 e7 s----TWebBrowser 的 常 见 事 件 主 要 有: , N/ j9 T" g& ]! F1 |
----OnStatusTextChange = procedure(Sender: TObject; const Text: WideString) of object; 5 b0 \9 e" _* E+ D0 r- l
----在 状 态 栏 提 示 信 息 变 化 时 发 生, 参 数 Text 为 当 前 状 态 栏 提 示 信 息, 我 们 可 以 根 据 该 信 息 来 更 新 我 们 自 己 的 状 态 栏 提 示 信 息 或 处 理 其 它 的 事 务。
& b! S* @! K3 y1 m. W5 _----OnProgressChange = procedure(Sender: TObject; Progress, ProgressMax: Integer) of object; + A* v" p# \9 ]) }4 O$ H6 D# E
----在 打 开 页 面 的 进 度 变 化 时 发 生, 参 数 Progress 为 当 前 进 度,ProgressMax 为 总 进 度, 我 们 可 以 根 据 这 两 个 参 数 来 更 新 我 们 自 己 的 状 态 栏 提 示 信 息 或 处 理 其 它 的 事 务。 2 N2 U2 S+ c7 W+ H
OnCommandStateChange = procedure(Sender: 6 L/ b0 R h: P& v4 @0 O E
TObject; Command: Integer; Enable: WordBool) of object; & ?) A8 ]' o5 H5 ?
----当 执 行 新 的 命 令 时 发 生,Command 为 命 令 标 识,Enable 为 是 否 允 许 执 行 该 命 令。 ; Y5 y* U g: F# O& O7 h
OnTitleChange = procedure(Sender: TObject;$ N7 v& j ^7 G/ e
const Text: WideString) of object;
& I2 o# N1 T# N3 P: `3 i7 w" Z----在 页 面 的 标 题 发 生 变 化 时 发 生,Text 为 当 前 标 题。 / A4 j+ b7 K" K7 G5 g
OnPropertyChange = procedure(Sender: TObject;. N/ y% o' s0 p0 S
const Property_: WideString) of object; ; v* ^2 a, X; m/ Z2 s
----在 页 面 的 属 性 发 生 变 化 时 发 生,Property_ 为 属 性 名 称
# _5 W/ m; c9 z OnDownloadComplete: TNotifyEvent8 b: j( w: L& |. j. L# V
在 下 载 页 面 完 成 后 发 生。: \, R; X. I6 c) w$ t3 K" i
OnDownloadBegin: TNotifyEvent' n* ~' o, ^, U
在 下 载 页 面 开 始 前 发 生。 9 F& O) e _9 H+ d+ s2 {2 r
三、 两 个 例 子 5 {2 q( K3 v0 u+ e; g& P2 e
----1. 制 作 自 己 的 帮 助 系 统 0 I9 }. `1 W! V1 p, z$ x
----我 们 利 用IE 浏 览 器 控 件 为 用 户 制 作 了 一 个 帮 助 系 统, 帮 助 文 件 由 多 个HTML 文 件 组 成, 一 个 主 题 对 应 一 个 HTML 文 件(Topic.HTM), 每 个 主 题 下 的 项 目 对 应HTML 文 件 中 的 一 个 标 签( #Item)。 这 样 在 我 们 的 系 统 中, 就 不 必 再 调 用IE 浏 览 器 或 WinHelp 程 序 来 为 用 户 提 供 帮 助 了。 相 信 大 家 知 道HTML 帮 助 文 件 与 传 统 的HLP 帮 助 文 件 相 比 的 优 势 所 在 吧。 ' f% Y8 M' s& B% N% p' M$ l, D: k: | \
----在 下 面 例 子 中, 演 示 了TWebBrowser(IE4 浏 览 器 控 件) 的Navigate 方 法 的 使 用 方 法。 请 注 意 程 序 中 的 注 释。 下 面 为 程 序 的 主 要 片 段。{ 根 据 主 题 和 项 目 调 用 帮 助 文 件}
1 t' I9 R1 a. Fprocedure ShowHelp( HelpTopic,HelpItem : String );
/ n# Y$ ^& D1 p: xvar- T4 n2 q0 W% d- B
TargetFrameName,PostData,Heads,Flags : OleVariant;9 w* K) S1 |# S- F& G+ x
URL : widestring;
2 ~3 X6 A& A, u. g% D" o) B0 d# h8 Cbegin
( D/ D( E4 j, I TargetFrameName := '';
W9 n' {2 W0 v/ O( b( v1 a { 指 定Frame 的 空 字 符 串 时,
6 U5 L! x( H5 I 则 在 当 前Frame 中 打 开 帮 助 文 件}
5 A+ N; a9 r& c3 ^0 P PostData := false;{ 不 发 送 数 据}' k5 }+ ]' N5 z6 @
Heads := '';{Header 信 息 为 空}; l7 ~- m3 ^9 V
Flags := 0;{Flags 设 为0}! t( n' _, J8 G7 \0 V: H
URL := HelpTopic + '.HTM #' +HelpItem;
8 }) I Y& m' ?6 b! \5 J i, r { 帮 助 信 息 的URL}
' ]: ]* |3 e7 n* `2 [4 G1 a with formHelp.webbrowser do
5 R4 }( m6 o$ ` ]8 i6 S { 在 帮 助 窗 口 中 的IE 浏 览 器: P0 s! d% a4 a/ O5 A8 U! V
控 件 中 显 示 帮 助 信 息}5 N/ Z: ?/ o% E6 M6 d( d! P
begin0 a! ~+ G' F. O; m* a: D
navigate(URL,Flags,TargetFrameName,6 y2 E6 a( w- F$ c
PostData,Heads);{ 显 示 帮 助 信 息}' i3 c: }( n5 @6 l6 ~
end;
# R4 ^" H' k# L% Q Fend;
# U$ j% ^6 @; k7 V- t+ S7 o----2. 显 示 一 个GIF 动 画 ' H$ o& D6 w( ?( M0 E. L, ?3 _
----假 如 你 还 没 有 一 个 适 合 的 动 画 显 示 控 件, 不 妨 试 用 一 下 下 面 的 方 法。 & Z' a) b8 m, J, r% b
procedure ShowGIF( GIFFileName : String );5 G+ t K3 Y. \$ h- b
var
: l3 ]3 f2 s# E% K: E, `( S TargetFrameName,PostData,Heads,Flags : OleVariant;8 @) s, m% U0 P0 X4 C
URL : widestring;( G$ g$ U q& L z1 p
begin
' t$ f c0 U3 ^) i9 _ TargetFrameName := '';
: W: C; T* a' b$ o( u& \0 z { 指 定Frame 的 空 字 符 串 时, ( f- I9 \7 ^( ^8 F; C4 J
则 在 当 前Frame 中 打 开 动 画 文 件}
6 {! u) A f c PostData := false;{ 不 发 送 数 据}
6 i, d1 o# j/ a- Q& u) c Heads := '';{Header 信 息 为 空}
( X4 R7 M' a# ~' Q3 f9 T Flags := 0;{Flags 设 为0}
' i6 F7 ~1 a, G) i: e URL := GIFFileName;
# S# A, z$ f# `( x* j$ x with formGIF.webbrowser do
8 g4 e, t a1 T2 Z. T{ 在 指 定 窗 口 中 的IE 浏 览 器 控 件 中 显 示 动 画}
1 }- L. _4 |1 [+ Q7 ~ b begin! h5 N1 `: |3 u5 I+ @8 p
navigate(URL,Flags,TargetFrameName,Post ?
$ F; q( { J8 D. A4 ^& @Data,Heads);{ 显 示 动 画 文 件}: ?' N' D5 I1 x
end;
! E+ M8 J% |9 R% L2 d2 J$ a( c) q: \end;
- N0 T+ T; Y2 T---- 以 上 程 序 在PWIN98 +Delphi3.0 下 调 试 通 过。
7 S R0 I2 ?+ h |