|
# i: S5 J& \2 g: t; l% F2 \* t
深 圳 市 邮 政 储 汇 局(518040): R& ~9 L$ ]$ E' T
王 发 军
" R. D( F8 y3 c, f5 {0 y1 J--------------------------------------------------------------------------------
4 ^! [+ ^3 t8 p一、 在Delphi 中 引 入IE 浏 览 器 控 件
# x: X5 J( q3 `" _---- 由 于IE 浏 览 器 控 件 需 要 提 供 显 示 功 能 才 能 使 用, 所 以 不 能 在 程 序 中 用CreateOleObject 取 得 一 个 实 例 后 直 接 使 用 其 属 性 和 方 法, 否 则 程 序 在 运 行 时 会 引 起 错 误; 这 时 需 要 用Delphi 中 提 供 的"Import ActiveX Control" 功 能, 操 作 方 法 如 下 所 述。
$ r' |( Z4 z# @& J----在"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, 其 中 有 这 三 个 控 件 的 包 装 细 节, 当 然 含 控 件 的 属 性 和 方 法 说 明 了, 它 可 以 作 为 我 们 使 用 控 件 的 参 考 资 料。
) {+ t- o3 M5 v0 ~* o+ m. l+ m二、 使 用IE 浏 览 器 控 件
C3 o! l. E( M: [& c8 `* {- U9 n----以TWebBrowser(IE4 浏 览 器 控 件) 为 例 子。 . e* S. k, G/ b$ ]4 X
----TWebBrowser 的 常 见 属 性 和 方 法 主 要 有:
3 @1 \ m6 x I6 s GoBack: 方 法, 后 退 到 上 一 个 页 面。' G% j# N0 Y: r4 x
GoForward: 方 法, 前 进 到 下 一 个 页 面。! p! z0 X0 u" c0 z" c& k0 Z5 D6 x$ m" \
GoHome: 方 法, 调 用 默 认 的 主 页 页 面,4 i/ W- K" }# x0 O+ S
该 页 面 在IE 的 选 项 中 设 定。4 S+ N. t H; W7 y
GoSearch: 方 法, 调 用 默 认 的 搜 索 页 面, 0 v1 [5 C+ Z9 z8 m+ I1 S- i' ^
该 页 面 在IE 的 选 项 中 设 定。
7 c( ?8 j% |1 j2 | Z---- Navigate(const URL: WideString; var Flags, TargetFrameName, PostData, Headers: OleVariant):方 法, 调 用 指 定 页 面, 具 体 参 数 如 下: * I4 L2 n2 @9 N1 D( m
URL: 指 定 页 面 的URL。
. [5 w9 m7 n" ^% ~ Flags:Word 类 型, 作 用 还 不 清 楚,
% H; M. [/ a* O" ]( x0 F! O/ \ 可 设 为0。 ; f2 G( y( K6 D. C6 i
---- TargetFrameName:WideString, 打 开 页 面 所 在 的Frame, 为 空 字 符 串 时 在 当 前 的Frame 中 打 开;TargetFrameName 指 定 的 Frame 存 在 时 在Frame 中 打 开; # q6 K* q; Q) r/ p9 |
----TargetFrameName 指 定 的Frame 不 存 在 时 则 新 建 一 个 窗 口 打 开, 此 时 就 相 当 于 调 用 外 部 的IE 浏 览 器 了。
4 B; v+ P+ A' f) | PostData:boolean, 是 否 允 许 发 送 数 据。5 n- X& }7 E+ O5 l
Headers:WideString,3 s! D; W P2 G3 ?( [0 _
要 发 送 的URL 请 求 的 头 部 数 据。
; v( }: h2 O+ s& @9 P( G Refresh: 方 法, 刷 新 当 前 页 面。9 }6 s# x5 P. e; ]9 \
Stop: 方 法, 停 止 调 用 或 打 开 当 前 页 面。# ^0 c- k& E) ~ F, _) r
LocationName: 属 性(WideString), 当 前 位 置 的 名 称。- w4 y$ e! |9 w
LocationURL: 属 性(WideString), 当 前 位 置 的URL。
4 t- a! K4 K' I4 S3 _8 e u+ t Busy: 属 性(Boolean), 是 否 正 忙。: v5 w% W* E% d$ p3 O' i* p/ @2 T
Visible: 属 性(Boolean), 浏 览 器 窗 口 是 否 可 见。 . B3 d: P, A* i
---- ( 以 下 属 性 为 在TWebBrowser 新 增, TWebBrowser_V1 中 没 有, 其 作 用 有 待 探 索) ( h1 L% s( j) a1 F8 L: _6 a
StatusBar: 属 性(Boolean), 是 否 显 示 状 态 栏。
" S$ V: [' o& ^8 d* B StatusText: 属 性(WideString), 状 态 栏 内 容。: D# d8 k7 i' U! q; Y
ToolBar: 属 性(SYSINT), 工 具 栏 中 的 内 容。
: Q0 i. h2 p+ T0 \- j7 o% A MenuBar: 属 性(Boolean), 是 否 显 示 菜 单 条。- g9 ?- H4 A! {% N
FullScreen: 属 性(Boolean), 是 否 全 屏 显 示。. l' o5 p- i0 D# T
Offline: 属 性(Boolean), 是 否 脱 机 浏 览。3 d7 K$ n" ^( f- p; p# K* d8 o
AddressBar: 属 性(Boolean), 是 否 显 示 地 址 栏。
0 j5 m6 v* ?2 a% f$ Z----TWebBrowser 的 常 见 事 件 主 要 有: / f4 O- C' W9 X! Z+ g6 e, _ \5 r
----OnStatusTextChange = procedure(Sender: TObject; const Text: WideString) of object;
" a4 B7 n: ~* R' T& s----在 状 态 栏 提 示 信 息 变 化 时 发 生, 参 数 Text 为 当 前 状 态 栏 提 示 信 息, 我 们 可 以 根 据 该 信 息 来 更 新 我 们 自 己 的 状 态 栏 提 示 信 息 或 处 理 其 它 的 事 务。 # h6 d$ _0 v0 w
----OnProgressChange = procedure(Sender: TObject; Progress, ProgressMax: Integer) of object; ! D1 r* |1 O/ W7 M) {3 a
----在 打 开 页 面 的 进 度 变 化 时 发 生, 参 数 Progress 为 当 前 进 度,ProgressMax 为 总 进 度, 我 们 可 以 根 据 这 两 个 参 数 来 更 新 我 们 自 己 的 状 态 栏 提 示 信 息 或 处 理 其 它 的 事 务。
7 w$ j( w# |: G+ v, v OnCommandStateChange = procedure(Sender:
' Z6 m, N# X. o1 M, W5 \5 m& _TObject; Command: Integer; Enable: WordBool) of object; ^' h: [5 g9 X
----当 执 行 新 的 命 令 时 发 生,Command 为 命 令 标 识,Enable 为 是 否 允 许 执 行 该 命 令。 3 q* P, U! M2 F7 s. z( x- s( f
OnTitleChange = procedure(Sender: TObject;
" K" s; C" W2 q: v# U6 d% q/ A const Text: WideString) of object; 7 |, `; C( i: @6 }* ?# x$ M8 A5 T0 U
----在 页 面 的 标 题 发 生 变 化 时 发 生,Text 为 当 前 标 题。 O! ?- l3 r: A* l/ A/ q
OnPropertyChange = procedure(Sender: TObject;& V' E1 L5 q: E" c; {
const Property_: WideString) of object;
2 a* M2 K: P4 a# [( v& {% x$ o5 \----在 页 面 的 属 性 发 生 变 化 时 发 生,Property_ 为 属 性 名 称 . n; I1 H2 C/ {; m7 u- X; z9 W
OnDownloadComplete: TNotifyEvent. s0 X' F" K5 o8 [7 @
在 下 载 页 面 完 成 后 发 生。
) X: E7 k/ n& R u& K OnDownloadBegin: TNotifyEvent
" P0 V1 V! D, b [+ L 在 下 载 页 面 开 始 前 发 生。 3 G% i4 J+ l+ j6 }! ] q
三、 两 个 例 子 ) |# c4 P2 h- E5 U* K' S
----1. 制 作 自 己 的 帮 助 系 统
, z0 H8 i6 m8 A* d) d" f5 e ~----我 们 利 用IE 浏 览 器 控 件 为 用 户 制 作 了 一 个 帮 助 系 统, 帮 助 文 件 由 多 个HTML 文 件 组 成, 一 个 主 题 对 应 一 个 HTML 文 件(Topic.HTM), 每 个 主 题 下 的 项 目 对 应HTML 文 件 中 的 一 个 标 签( #Item)。 这 样 在 我 们 的 系 统 中, 就 不 必 再 调 用IE 浏 览 器 或 WinHelp 程 序 来 为 用 户 提 供 帮 助 了。 相 信 大 家 知 道HTML 帮 助 文 件 与 传 统 的HLP 帮 助 文 件 相 比 的 优 势 所 在 吧。
& p/ C% z( d# y( v% ~" Y* w% l----在 下 面 例 子 中, 演 示 了TWebBrowser(IE4 浏 览 器 控 件) 的Navigate 方 法 的 使 用 方 法。 请 注 意 程 序 中 的 注 释。 下 面 为 程 序 的 主 要 片 段。{ 根 据 主 题 和 项 目 调 用 帮 助 文 件} 2 B# z% S# j3 g& S$ F
procedure ShowHelp( HelpTopic,HelpItem : String );
) Z, J, x4 N; c+ E$ I% Hvar
A8 Z1 c5 i# q* S/ b2 H/ r TargetFrameName,PostData,Heads,Flags : OleVariant;
/ d; M; P" v# x URL : widestring;# I) i. g% r/ v
begin
: P& I3 M2 w6 o* D- F3 _, V TargetFrameName := '';/ Y0 F& x% R% {( {1 p
{ 指 定Frame 的 空 字 符 串 时,
7 X& |- A5 b1 K. a0 S2 y& Q% F; S* h 则 在 当 前Frame 中 打 开 帮 助 文 件}9 K3 {. _' F M( ~3 F$ r; l
PostData := false;{ 不 发 送 数 据}
$ ]7 M7 m8 v5 g$ B2 |9 p) A Heads := '';{Header 信 息 为 空}
: W% _6 u" Z9 L9 r2 b Flags := 0;{Flags 设 为0}( e! N# K" w5 {# }0 o( M; `
URL := HelpTopic + '.HTM #' +HelpItem;, i2 q. V. M- I# \5 u+ }& v5 u5 J- S
{ 帮 助 信 息 的URL}- B( F$ |9 P5 k i2 U' t. q9 _
with formHelp.webbrowser do
1 q) t. N2 ^1 J/ z8 } { 在 帮 助 窗 口 中 的IE 浏 览 器
$ b7 F2 y4 W2 D2 r9 i% d/ e# h 控 件 中 显 示 帮 助 信 息}: j/ `. `+ {6 S8 A3 I! L; Y5 T
begin' [( g9 D2 P9 m7 ]! ^
navigate(URL,Flags,TargetFrameName," z# F4 C. J5 J! f
PostData,Heads);{ 显 示 帮 助 信 息}
! j) U8 W" E3 O' o9 X( @/ t end;
5 a& |( U1 I5 x3 Z8 B7 K6 ^end; . i; {4 s3 i. F) Z0 J/ W
----2. 显 示 一 个GIF 动 画
3 E: r% q. [. H4 l) e D----假 如 你 还 没 有 一 个 适 合 的 动 画 显 示 控 件, 不 妨 试 用 一 下 下 面 的 方 法。 1 j9 k( k9 J9 R+ _! U
procedure ShowGIF( GIFFileName : String );3 }3 ]5 f" E2 R0 F: O- _7 w/ ?
var7 Y, _" q8 y+ n& {, z$ K- [
TargetFrameName,PostData,Heads,Flags : OleVariant;
( P5 D& D `& w URL : widestring;+ g# P8 |- M7 [0 `& M% _
begin
5 J, B2 L d2 e TargetFrameName := '';
- i9 T; J- y$ \ { 指 定Frame 的 空 字 符 串 时,
9 `: P( D. W" Q# |' g8 M* j 则 在 当 前Frame 中 打 开 动 画 文 件}9 i: s( ^) t1 l" P+ `
PostData := false;{ 不 发 送 数 据}
# x4 c A7 H4 k Heads := '';{Header 信 息 为 空}
- Y0 r) P c8 I& }, [' J Flags := 0;{Flags 设 为0}
( T8 @, G0 F5 x: H/ R URL := GIFFileName;6 D2 f% z/ a3 g8 U) ]
with formGIF.webbrowser do6 K. e+ J* A: @
{ 在 指 定 窗 口 中 的IE 浏 览 器 控 件 中 显 示 动 画}9 Q9 v5 Z- X! L, z- t
begin
/ t/ {+ L+ W9 g, i& b navigate(URL,Flags,TargetFrameName,Post ?7 S) |- P4 ]% W8 K+ v! H
Data,Heads);{ 显 示 动 画 文 件}+ X9 f9 A) w5 J+ ?/ E1 Z5 q1 s6 Y
end;* ?2 Q0 w( D ^6 q; S) w, d3 _, _
end;
& K) }4 T4 B6 a% Z6 a @+ d---- 以 上 程 序 在PWIN98 +Delphi3.0 下 调 试 通 过。
* t% V) S% w3 F- x |