|
* U: Z( t9 u' Y( u
深 圳 市 邮 政 储 汇 局(518040)
; P+ t" V! M3 }王 发 军 ; E2 }7 W1 t/ b3 ^2 Q, M3 J* f7 T; m
-------------------------------------------------------------------------------- * u& f/ r& M" \. E
一、 在Delphi 中 引 入IE 浏 览 器 控 件 , J6 `' @9 ~" G& d) z7 h: S: Q
---- 由 于IE 浏 览 器 控 件 需 要 提 供 显 示 功 能 才 能 使 用, 所 以 不 能 在 程 序 中 用CreateOleObject 取 得 一 个 实 例 后 直 接 使 用 其 属 性 和 方 法, 否 则 程 序 在 运 行 时 会 引 起 错 误; 这 时 需 要 用Delphi 中 提 供 的"Import ActiveX Control" 功 能, 操 作 方 法 如 下 所 述。 0 p7 f# h9 i3 ^
----在"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, 其 中 有 这 三 个 控 件 的 包 装 细 节, 当 然 含 控 件 的 属 性 和 方 法 说 明 了, 它 可 以 作 为 我 们 使 用 控 件 的 参 考 资 料。
]! c0 _4 j' }- ?二、 使 用IE 浏 览 器 控 件
+ [/ u1 ^! K; F/ `& E- c----以TWebBrowser(IE4 浏 览 器 控 件) 为 例 子。 : j T( F& Y# ^5 o
----TWebBrowser 的 常 见 属 性 和 方 法 主 要 有:
5 W- M( O) q" S GoBack: 方 法, 后 退 到 上 一 个 页 面。
- t, ~' i9 w# g% s# i8 p2 Q GoForward: 方 法, 前 进 到 下 一 个 页 面。$ S& `$ r2 o2 C; G; n
GoHome: 方 法, 调 用 默 认 的 主 页 页 面,
- i! P( }& x h: h( O 该 页 面 在IE 的 选 项 中 设 定。$ i' T7 C9 m5 ~
GoSearch: 方 法, 调 用 默 认 的 搜 索 页 面,
7 o% @8 c, M/ ]8 C2 Q( Q+ y 该 页 面 在IE 的 选 项 中 设 定。
7 k0 W/ j- E4 |2 \' Z& ?---- Navigate(const URL: WideString; var Flags, TargetFrameName, PostData, Headers: OleVariant):方 法, 调 用 指 定 页 面, 具 体 参 数 如 下: ; r+ [; l5 h1 U3 k3 K! z# ^
URL: 指 定 页 面 的URL。
m& O5 }4 k* R7 s6 m# N' N Flags:Word 类 型, 作 用 还 不 清 楚,0 S- Z8 @+ ?" U1 v# g8 y( Z1 d. m
可 设 为0。 3 F8 R. c7 D/ e
---- TargetFrameName:WideString, 打 开 页 面 所 在 的Frame, 为 空 字 符 串 时 在 当 前 的Frame 中 打 开;TargetFrameName 指 定 的 Frame 存 在 时 在Frame 中 打 开;
3 ]% a7 i" i% o----TargetFrameName 指 定 的Frame 不 存 在 时 则 新 建 一 个 窗 口 打 开, 此 时 就 相 当 于 调 用 外 部 的IE 浏 览 器 了。 $ d7 C2 D; G' S( A Z: K
PostData:boolean, 是 否 允 许 发 送 数 据。$ D2 @3 y; I) \+ [4 ?
Headers:WideString,1 r/ H- }8 m3 r% f9 Z
要 发 送 的URL 请 求 的 头 部 数 据。+ ?" r/ U2 f; L2 P z
Refresh: 方 法, 刷 新 当 前 页 面。# ^3 R! F$ U# ~: W& Q2 f3 x
Stop: 方 法, 停 止 调 用 或 打 开 当 前 页 面。! U7 z4 w. X6 y1 Z9 F, p4 X6 \
LocationName: 属 性(WideString), 当 前 位 置 的 名 称。# F5 i0 q" U8 Y0 o& D8 W
LocationURL: 属 性(WideString), 当 前 位 置 的URL。
. A; T. R1 x$ C4 w( z, t$ A Busy: 属 性(Boolean), 是 否 正 忙。2 Q5 | T. w9 V2 {3 I- ^2 w5 Y" u
Visible: 属 性(Boolean), 浏 览 器 窗 口 是 否 可 见。 $ h* v$ i/ A( P
---- ( 以 下 属 性 为 在TWebBrowser 新 增, TWebBrowser_V1 中 没 有, 其 作 用 有 待 探 索) ) X; _! J6 G% Y/ n
StatusBar: 属 性(Boolean), 是 否 显 示 状 态 栏。0 v( e& ~; S/ s: g7 j0 |% W) @
StatusText: 属 性(WideString), 状 态 栏 内 容。
# r) w$ ~& F4 m6 [5 V' K ToolBar: 属 性(SYSINT), 工 具 栏 中 的 内 容。, Q3 ~( a$ d! o; O2 L: X
MenuBar: 属 性(Boolean), 是 否 显 示 菜 单 条。
' }/ W) k+ r+ B FullScreen: 属 性(Boolean), 是 否 全 屏 显 示。9 E0 r* g! t; ]/ j3 U6 W+ o- w
Offline: 属 性(Boolean), 是 否 脱 机 浏 览。
9 w X% X) O$ ~+ P1 O AddressBar: 属 性(Boolean), 是 否 显 示 地 址 栏。
4 }( ^( {7 \" \4 ^ X8 R1 \----TWebBrowser 的 常 见 事 件 主 要 有: " D# G( D! v6 `/ G' F( m) N0 [ x
----OnStatusTextChange = procedure(Sender: TObject; const Text: WideString) of object; 5 R1 @- J) \3 \& g( E
----在 状 态 栏 提 示 信 息 变 化 时 发 生, 参 数 Text 为 当 前 状 态 栏 提 示 信 息, 我 们 可 以 根 据 该 信 息 来 更 新 我 们 自 己 的 状 态 栏 提 示 信 息 或 处 理 其 它 的 事 务。
* z) J. g9 D# M- z* P3 ^. M----OnProgressChange = procedure(Sender: TObject; Progress, ProgressMax: Integer) of object; - s5 R0 t" T5 E- }$ e$ J
----在 打 开 页 面 的 进 度 变 化 时 发 生, 参 数 Progress 为 当 前 进 度,ProgressMax 为 总 进 度, 我 们 可 以 根 据 这 两 个 参 数 来 更 新 我 们 自 己 的 状 态 栏 提 示 信 息 或 处 理 其 它 的 事 务。 8 x" g* N8 X6 Q, s# l, w; n
OnCommandStateChange = procedure(Sender:
+ p# o* P- W, h6 a3 E8 L) |TObject; Command: Integer; Enable: WordBool) of object; ) z: F5 F5 A8 t
----当 执 行 新 的 命 令 时 发 生,Command 为 命 令 标 识,Enable 为 是 否 允 许 执 行 该 命 令。 - X ?, G2 A, k' z% C
OnTitleChange = procedure(Sender: TObject;& M* h# N: w' C/ b; M( e& c9 u; |
const Text: WideString) of object;
1 k) ]) a! L4 F2 M* o) U) f, L. ?----在 页 面 的 标 题 发 生 变 化 时 发 生,Text 为 当 前 标 题。
4 b/ v7 `+ j5 O, q( S OnPropertyChange = procedure(Sender: TObject;$ \' O& S: J l4 ]$ {
const Property_: WideString) of object; 2 D8 L. c: k* T z3 E; i
----在 页 面 的 属 性 发 生 变 化 时 发 生,Property_ 为 属 性 名 称
+ n& R d' ~6 N& ~# V# |8 {) c6 n) o OnDownloadComplete: TNotifyEvent
! g1 f8 D* t" j0 f9 J! N; c 在 下 载 页 面 完 成 后 发 生。! U% @$ X. }; ^4 v P, c
OnDownloadBegin: TNotifyEvent( l$ o( h/ ?0 b
在 下 载 页 面 开 始 前 发 生。 ; V1 r, z( v: B. c5 G- o
三、 两 个 例 子
. y5 a# j/ T. F: C----1. 制 作 自 己 的 帮 助 系 统 6 c ^+ [: j3 D$ Y6 | \
----我 们 利 用IE 浏 览 器 控 件 为 用 户 制 作 了 一 个 帮 助 系 统, 帮 助 文 件 由 多 个HTML 文 件 组 成, 一 个 主 题 对 应 一 个 HTML 文 件(Topic.HTM), 每 个 主 题 下 的 项 目 对 应HTML 文 件 中 的 一 个 标 签( #Item)。 这 样 在 我 们 的 系 统 中, 就 不 必 再 调 用IE 浏 览 器 或 WinHelp 程 序 来 为 用 户 提 供 帮 助 了。 相 信 大 家 知 道HTML 帮 助 文 件 与 传 统 的HLP 帮 助 文 件 相 比 的 优 势 所 在 吧。
& _1 F4 t8 t3 n1 v----在 下 面 例 子 中, 演 示 了TWebBrowser(IE4 浏 览 器 控 件) 的Navigate 方 法 的 使 用 方 法。 请 注 意 程 序 中 的 注 释。 下 面 为 程 序 的 主 要 片 段。{ 根 据 主 题 和 项 目 调 用 帮 助 文 件}
! M0 l& F, K0 cprocedure ShowHelp( HelpTopic,HelpItem : String );
/ S2 ]2 S+ z3 w5 g9 R/ rvar' v7 z* Y+ c' Z( H8 Z+ Z
TargetFrameName,PostData,Heads,Flags : OleVariant;
2 C7 q; M Z, N) m/ ?! l C3 I URL : widestring;
7 b- R: Y$ C) U/ \( Rbegin6 `* y% J& V0 `7 r5 b$ S0 y8 O3 g* m
TargetFrameName := '';
4 N$ R7 k3 \$ K { 指 定Frame 的 空 字 符 串 时, 6 ?" F8 s6 K0 I( t
则 在 当 前Frame 中 打 开 帮 助 文 件}
+ \- S- @9 M) J8 n PostData := false;{ 不 发 送 数 据}
. Y7 i/ w2 e5 v Y: s, Y Heads := '';{Header 信 息 为 空}/ m1 a3 h: j! ?6 E
Flags := 0;{Flags 设 为0}
1 m% ?+ b. O8 b: f6 {( i; I URL := HelpTopic + '.HTM #' +HelpItem;; E# u& O! D+ k& @& x& O" c
{ 帮 助 信 息 的URL}# Z. j7 w( w4 D0 [% R) y
with formHelp.webbrowser do5 `4 E3 O2 ?& O) l& i
{ 在 帮 助 窗 口 中 的IE 浏 览 器) w2 o0 X3 @; n% j
控 件 中 显 示 帮 助 信 息}& Z4 S8 {4 Z; ^7 }1 g% J
begin
9 w) [- s! u. v8 Q& ^: v Y8 b3 j navigate(URL,Flags,TargetFrameName,
% l& L# e6 [4 mPostData,Heads);{ 显 示 帮 助 信 息}* u# D1 o9 e8 z- f, ?8 P# L
end;+ X# O% F6 Y, ?; K1 ^
end; / K5 R# W4 W ?' R* T
----2. 显 示 一 个GIF 动 画
^0 z/ c; ?# T3 H, E# W) g----假 如 你 还 没 有 一 个 适 合 的 动 画 显 示 控 件, 不 妨 试 用 一 下 下 面 的 方 法。 " b9 i9 Z4 }( h- ~6 b! D
procedure ShowGIF( GIFFileName : String );1 `/ V/ m' e. Q7 A/ ~% L
var3 ]; R" a8 X3 T1 j
TargetFrameName,PostData,Heads,Flags : OleVariant;9 \/ L. j* j$ q4 b6 j6 o
URL : widestring;3 |3 C; F, E$ k7 f) O
begin0 r, b5 Y9 F, I/ T* W% c* u% |
TargetFrameName := '';
9 r n) M$ V; G1 L" Y. c: _# l { 指 定Frame 的 空 字 符 串 时, 6 z; w7 J- @; i8 \8 h
则 在 当 前Frame 中 打 开 动 画 文 件}$ D2 I. V9 c7 ]3 B6 E& r$ _+ |# Y1 N
PostData := false;{ 不 发 送 数 据}
' u6 w" n, v& K1 r2 ~ Heads := '';{Header 信 息 为 空}
6 F. W2 B6 ?0 R9 N/ P2 T Flags := 0;{Flags 设 为0}
3 H+ z& k; p' q; s6 M% x( L5 f URL := GIFFileName;5 V$ q( j4 U4 N; {5 v6 W% {
with formGIF.webbrowser do0 T& i1 ~( Q7 ]/ s7 u$ j
{ 在 指 定 窗 口 中 的IE 浏 览 器 控 件 中 显 示 动 画}2 i, k; _2 R; b! I" m L" I+ I
begin
2 J6 L: ~3 S3 O8 ?; f u# v navigate(URL,Flags,TargetFrameName,Post ?3 o. f+ l+ Y% a' G
Data,Heads);{ 显 示 动 画 文 件}
+ h+ H! B6 V! i9 }' z8 m& c end;2 N7 Z4 B9 {3 d5 m! {" I1 X- e
end; . z! f( Z' w/ y" K
---- 以 上 程 序 在PWIN98 +Delphi3.0 下 调 试 通 过。
; i+ ?1 E" o) D0 _3 I |