|
5 C) g/ t+ S3 b0 C: ?7 R深 圳 市 邮 政 储 汇 局(518040)
1 g; E7 T3 q. J# v; y8 M& K. x- b王 发 军 ! J' }+ y* K6 o d$ s8 \
-------------------------------------------------------------------------------- , i0 M% i) g9 D* ]7 [; t( c$ C' n
一、 在Delphi 中 引 入IE 浏 览 器 控 件
1 W1 ?" m4 V5 o+ d9 V---- 由 于IE 浏 览 器 控 件 需 要 提 供 显 示 功 能 才 能 使 用, 所 以 不 能 在 程 序 中 用CreateOleObject 取 得 一 个 实 例 后 直 接 使 用 其 属 性 和 方 法, 否 则 程 序 在 运 行 时 会 引 起 错 误; 这 时 需 要 用Delphi 中 提 供 的"Import ActiveX Control" 功 能, 操 作 方 法 如 下 所 述。
C" W. x- \0 G& V7 _) b) J+ f----在"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, 其 中 有 这 三 个 控 件 的 包 装 细 节, 当 然 含 控 件 的 属 性 和 方 法 说 明 了, 它 可 以 作 为 我 们 使 用 控 件 的 参 考 资 料。
7 E9 k) ? F3 s, j5 a3 |6 p8 z8 N二、 使 用IE 浏 览 器 控 件
" [7 s/ V, M8 m( m5 W----以TWebBrowser(IE4 浏 览 器 控 件) 为 例 子。 , q e1 }% f+ s* j/ ~
----TWebBrowser 的 常 见 属 性 和 方 法 主 要 有:
& {% S/ M9 V6 [* W9 |# m GoBack: 方 法, 后 退 到 上 一 个 页 面。
A' G7 f. D9 ~& j3 g1 m% b GoForward: 方 法, 前 进 到 下 一 个 页 面。
' I; K: Z# ~6 A! ~6 A: @ GoHome: 方 法, 调 用 默 认 的 主 页 页 面,
$ [) @. O% }5 ]+ D+ t) P5 {4 ]% F 该 页 面 在IE 的 选 项 中 设 定。
! ~% c+ E# o+ @" m GoSearch: 方 法, 调 用 默 认 的 搜 索 页 面, 5 Z) F5 k" h& x3 N9 I h9 D1 _
该 页 面 在IE 的 选 项 中 设 定。 , p6 A( i& S4 P* W: k
---- Navigate(const URL: WideString; var Flags, TargetFrameName, PostData, Headers: OleVariant):方 法, 调 用 指 定 页 面, 具 体 参 数 如 下: % {/ W$ U7 m; k
URL: 指 定 页 面 的URL。* p9 M7 G+ z, f# v' m8 U
Flags:Word 类 型, 作 用 还 不 清 楚,
, W. \$ f* e. ^; S: H 可 设 为0。
6 n5 E0 S0 Q, E4 s1 t3 r- _% s8 Y---- TargetFrameName:WideString, 打 开 页 面 所 在 的Frame, 为 空 字 符 串 时 在 当 前 的Frame 中 打 开;TargetFrameName 指 定 的 Frame 存 在 时 在Frame 中 打 开;
# h/ v9 Q! D( Y- p! k- v----TargetFrameName 指 定 的Frame 不 存 在 时 则 新 建 一 个 窗 口 打 开, 此 时 就 相 当 于 调 用 外 部 的IE 浏 览 器 了。 4 Z; S. v Q0 g1 n9 S6 v+ i
PostData:boolean, 是 否 允 许 发 送 数 据。
* K) l" g. C" r# W Headers:WideString,4 [& L' k1 F: i9 f5 R8 |/ `
要 发 送 的URL 请 求 的 头 部 数 据。
6 W: _9 u2 O5 `; [$ B Refresh: 方 法, 刷 新 当 前 页 面。
|6 S1 v) d G* i1 U Stop: 方 法, 停 止 调 用 或 打 开 当 前 页 面。1 {" _ U/ Z( q8 Z
LocationName: 属 性(WideString), 当 前 位 置 的 名 称。6 u P3 C: a- o3 S0 h! @7 Q
LocationURL: 属 性(WideString), 当 前 位 置 的URL。/ @. O% Q' i# [& Z, ]0 [
Busy: 属 性(Boolean), 是 否 正 忙。( o9 C- X+ c4 f! G9 K
Visible: 属 性(Boolean), 浏 览 器 窗 口 是 否 可 见。 4 `4 R2 `4 b" y& z, `' L. u2 t
---- ( 以 下 属 性 为 在TWebBrowser 新 增, TWebBrowser_V1 中 没 有, 其 作 用 有 待 探 索)
8 C& Z; t6 ~ N2 ~3 i/ d StatusBar: 属 性(Boolean), 是 否 显 示 状 态 栏。
, s2 a6 a/ W4 g StatusText: 属 性(WideString), 状 态 栏 内 容。
% k$ X2 y) f6 F8 c ToolBar: 属 性(SYSINT), 工 具 栏 中 的 内 容。
1 H; d/ h( a* O/ C8 S: X MenuBar: 属 性(Boolean), 是 否 显 示 菜 单 条。/ x. |# Y: x0 |0 X
FullScreen: 属 性(Boolean), 是 否 全 屏 显 示。
~1 ]; w; r* c- E Offline: 属 性(Boolean), 是 否 脱 机 浏 览。
" B( N7 c8 G. w4 q8 ~ AddressBar: 属 性(Boolean), 是 否 显 示 地 址 栏。 & o$ p5 j2 w) y" p. I
----TWebBrowser 的 常 见 事 件 主 要 有: 7 u& u1 R/ J% E! A* w" R
----OnStatusTextChange = procedure(Sender: TObject; const Text: WideString) of object;
6 f1 S* h# t4 J3 g3 w* f9 G7 E----在 状 态 栏 提 示 信 息 变 化 时 发 生, 参 数 Text 为 当 前 状 态 栏 提 示 信 息, 我 们 可 以 根 据 该 信 息 来 更 新 我 们 自 己 的 状 态 栏 提 示 信 息 或 处 理 其 它 的 事 务。
Y& b* S, a* O$ L- K* w3 n----OnProgressChange = procedure(Sender: TObject; Progress, ProgressMax: Integer) of object;
' u5 o2 `! g/ m( J# }, ~----在 打 开 页 面 的 进 度 变 化 时 发 生, 参 数 Progress 为 当 前 进 度,ProgressMax 为 总 进 度, 我 们 可 以 根 据 这 两 个 参 数 来 更 新 我 们 自 己 的 状 态 栏 提 示 信 息 或 处 理 其 它 的 事 务。
. I; u& G& A* G# F) B2 U2 u OnCommandStateChange = procedure(Sender: % u% ^9 w' ?; `% Z _3 z- m8 e2 ^
TObject; Command: Integer; Enable: WordBool) of object;
" R$ b/ @& U6 _4 ^! S----当 执 行 新 的 命 令 时 发 生,Command 为 命 令 标 识,Enable 为 是 否 允 许 执 行 该 命 令。 3 [+ C. t' \% j [; [
OnTitleChange = procedure(Sender: TObject;' S; Z( L4 t: N: Z
const Text: WideString) of object;
. u# M! p( s. k* S3 B. ` m----在 页 面 的 标 题 发 生 变 化 时 发 生,Text 为 当 前 标 题。
% @8 e* [) b1 f) G# n' E OnPropertyChange = procedure(Sender: TObject;1 c" D! {( `/ c. L& F
const Property_: WideString) of object;
! X" e: p7 `' [5 j----在 页 面 的 属 性 发 生 变 化 时 发 生,Property_ 为 属 性 名 称
& W' ]$ H" P5 b s& l3 ]; ` OnDownloadComplete: TNotifyEvent9 C4 x* B0 A3 u- k, _3 n5 H1 k
在 下 载 页 面 完 成 后 发 生。1 N7 \! w0 E, S" A# @8 H
OnDownloadBegin: TNotifyEvent* j2 v& n( [" X, N5 V
在 下 载 页 面 开 始 前 发 生。 3 A% q q& ^) e8 R9 e4 t
三、 两 个 例 子 / k4 |: p/ Y6 r- I* W
----1. 制 作 自 己 的 帮 助 系 统 3 G$ @4 r1 u; v4 r7 A1 Y6 z N" y$ @
----我 们 利 用IE 浏 览 器 控 件 为 用 户 制 作 了 一 个 帮 助 系 统, 帮 助 文 件 由 多 个HTML 文 件 组 成, 一 个 主 题 对 应 一 个 HTML 文 件(Topic.HTM), 每 个 主 题 下 的 项 目 对 应HTML 文 件 中 的 一 个 标 签( #Item)。 这 样 在 我 们 的 系 统 中, 就 不 必 再 调 用IE 浏 览 器 或 WinHelp 程 序 来 为 用 户 提 供 帮 助 了。 相 信 大 家 知 道HTML 帮 助 文 件 与 传 统 的HLP 帮 助 文 件 相 比 的 优 势 所 在 吧。
0 O6 c: [2 s. j4 w----在 下 面 例 子 中, 演 示 了TWebBrowser(IE4 浏 览 器 控 件) 的Navigate 方 法 的 使 用 方 法。 请 注 意 程 序 中 的 注 释。 下 面 为 程 序 的 主 要 片 段。{ 根 据 主 题 和 项 目 调 用 帮 助 文 件}
+ o4 ^8 n& }' B6 e. ^procedure ShowHelp( HelpTopic,HelpItem : String );
, l* U! W7 [" u7 h8 Lvar
, Q! G7 F7 b" _. l TargetFrameName,PostData,Heads,Flags : OleVariant;
% @( K) R6 [# M! q: r7 t7 N' c URL : widestring;
& g) k) p: B' q: Vbegin5 T& Q# E4 ]1 c1 W& T8 Q0 `
TargetFrameName := '';: }7 d+ b* m4 ]& `" I; f# |
{ 指 定Frame 的 空 字 符 串 时, 3 M$ @, C& C) \, L) r. [
则 在 当 前Frame 中 打 开 帮 助 文 件}
$ G4 v, ~5 M" l PostData := false;{ 不 发 送 数 据}3 ?: S$ P( }3 G2 y% u, d* D
Heads := '';{Header 信 息 为 空}; D( z8 U6 I7 e. T2 L' o) d+ N
Flags := 0;{Flags 设 为0}) n& u$ n0 C( y7 [$ S8 r( l
URL := HelpTopic + '.HTM #' +HelpItem;
8 D0 o, l/ ^9 P1 M$ s3 k6 ]# w { 帮 助 信 息 的URL}
! B1 I& \' ~( B- F with formHelp.webbrowser do! R/ v- _" L8 k3 n& A! W: a0 w
{ 在 帮 助 窗 口 中 的IE 浏 览 器
1 h1 D; A5 o* W' K; m 控 件 中 显 示 帮 助 信 息}
% q6 j/ A/ ?8 G& a4 o, P: \ begin, X8 r b: E- j( I
navigate(URL,Flags,TargetFrameName,2 |+ ?" h& T- U2 @3 }
PostData,Heads);{ 显 示 帮 助 信 息}
( G% h5 b! g0 | end;
9 b" N2 X/ d( ]. ]1 hend;
^ s# o" Y6 z; V1 u----2. 显 示 一 个GIF 动 画 # m: l: Q7 G k' s, W* [( [
----假 如 你 还 没 有 一 个 适 合 的 动 画 显 示 控 件, 不 妨 试 用 一 下 下 面 的 方 法。 9 H" q8 O W* E x* `
procedure ShowGIF( GIFFileName : String );
0 H5 L6 x/ v7 b' y9 Ivar+ U d) i. A! r9 @
TargetFrameName,PostData,Heads,Flags : OleVariant;
' e* a; w" v. q3 W# n9 e: @5 q URL : widestring;' b+ _( V( T7 n8 S6 a% ]) w
begin
* x' S- R$ e' S; f% e TargetFrameName := '';
, B/ `3 q% S9 Y- g$ t- h5 V { 指 定Frame 的 空 字 符 串 时,
( b4 I: o9 n* ^2 t, \ 则 在 当 前Frame 中 打 开 动 画 文 件}3 p1 z# O% n2 u
PostData := false;{ 不 发 送 数 据}
. I4 q7 f/ V0 l# J+ X. ]: ? Heads := '';{Header 信 息 为 空}
" r Z% }# R. y7 _# q: p Flags := 0;{Flags 设 为0}
- \ A- T: ]+ X0 i9 _7 `) [4 R URL := GIFFileName;1 }0 @8 ?' s7 I2 k9 n' c8 O
with formGIF.webbrowser do
4 ?0 O8 B6 _( N1 D8 `: F4 d) o{ 在 指 定 窗 口 中 的IE 浏 览 器 控 件 中 显 示 动 画}
1 y- I" v* S0 C* a. \% e% o begin
' u* J* C2 t. Y5 \ navigate(URL,Flags,TargetFrameName,Post ?
+ V# ~, [$ G! E/ ]: e2 n/ l, sData,Heads);{ 显 示 动 画 文 件}
$ }" e" ^8 v6 K' I+ x end;5 ~' H% n% C2 W5 u# x0 A& B
end;
4 J- y+ ]+ V! e: W---- 以 上 程 序 在PWIN98 +Delphi3.0 下 调 试 通 过。
9 ?' K( h1 j- H4 c1 W0 F, Z |