|
2 P7 u, _- J9 d8 A" Y1 V
深 圳 市 邮 政 储 汇 局(518040)
( s; b- m+ I6 w' T王 发 军
, Q+ G3 y w- ^+ z: \1 ]8 f# q-------------------------------------------------------------------------------- & N# ~& f( r% Y) k# H6 Z
一、 在Delphi 中 引 入IE 浏 览 器 控 件 9 X+ p; B! T f" q$ P
---- 由 于IE 浏 览 器 控 件 需 要 提 供 显 示 功 能 才 能 使 用, 所 以 不 能 在 程 序 中 用CreateOleObject 取 得 一 个 实 例 后 直 接 使 用 其 属 性 和 方 法, 否 则 程 序 在 运 行 时 会 引 起 错 误; 这 时 需 要 用Delphi 中 提 供 的"Import ActiveX Control" 功 能, 操 作 方 法 如 下 所 述。
7 s: c6 T& g, n----在"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, 其 中 有 这 三 个 控 件 的 包 装 细 节, 当 然 含 控 件 的 属 性 和 方 法 说 明 了, 它 可 以 作 为 我 们 使 用 控 件 的 参 考 资 料。 # {+ P' [4 B( F+ I% z$ K
二、 使 用IE 浏 览 器 控 件
0 v3 f) q/ w- Z k5 f----以TWebBrowser(IE4 浏 览 器 控 件) 为 例 子。 & X! g. j6 V: B& | Y) y
----TWebBrowser 的 常 见 属 性 和 方 法 主 要 有: 3 g0 K9 k6 u' ~* ?) y h
GoBack: 方 法, 后 退 到 上 一 个 页 面。. h5 X+ \4 x. @. `9 p) [# X
GoForward: 方 法, 前 进 到 下 一 个 页 面。
1 q' P. y0 s$ k* P GoHome: 方 法, 调 用 默 认 的 主 页 页 面,
7 e' f3 Q1 P! ^/ O+ q 该 页 面 在IE 的 选 项 中 设 定。, H! T. w/ i' T' N2 [ a
GoSearch: 方 法, 调 用 默 认 的 搜 索 页 面,
2 G$ @& r# p. N1 y5 z( n4 R6 e/ J9 D 该 页 面 在IE 的 选 项 中 设 定。 i Q% h' `( S0 i
---- Navigate(const URL: WideString; var Flags, TargetFrameName, PostData, Headers: OleVariant):方 法, 调 用 指 定 页 面, 具 体 参 数 如 下:
) M( D! V( A) D: y URL: 指 定 页 面 的URL。: c/ h( s: K; ^
Flags:Word 类 型, 作 用 还 不 清 楚,
# W7 e& A; Q/ \5 Q0 K 可 设 为0。
7 F! E# l% U+ x J, S6 l2 ]---- TargetFrameName:WideString, 打 开 页 面 所 在 的Frame, 为 空 字 符 串 时 在 当 前 的Frame 中 打 开;TargetFrameName 指 定 的 Frame 存 在 时 在Frame 中 打 开; " |% [$ M) R4 e6 p; t: V( z% H* G
----TargetFrameName 指 定 的Frame 不 存 在 时 则 新 建 一 个 窗 口 打 开, 此 时 就 相 当 于 调 用 外 部 的IE 浏 览 器 了。 ; |7 P* V) a3 E8 u* { J- g
PostData:boolean, 是 否 允 许 发 送 数 据。
% y5 }: C! R# X0 s4 q# ^ Headers:WideString,! k3 Z8 z) V: F5 }/ P* u
要 发 送 的URL 请 求 的 头 部 数 据。
0 B% n# k( S. {) D( i+ W+ @/ w- O7 n Refresh: 方 法, 刷 新 当 前 页 面。
) u$ l, v+ s/ K* f/ r. n. m Stop: 方 法, 停 止 调 用 或 打 开 当 前 页 面。
1 p& Y" ?. O3 k/ G7 U. e5 `; ^* a LocationName: 属 性(WideString), 当 前 位 置 的 名 称。' ?; _+ ^# |9 c; g9 {
LocationURL: 属 性(WideString), 当 前 位 置 的URL。
3 Z& E3 |6 P8 |. a8 M Busy: 属 性(Boolean), 是 否 正 忙。$ _# P9 D* t, ^6 K
Visible: 属 性(Boolean), 浏 览 器 窗 口 是 否 可 见。
7 ?4 l8 V, i+ S3 f& T---- ( 以 下 属 性 为 在TWebBrowser 新 增, TWebBrowser_V1 中 没 有, 其 作 用 有 待 探 索) 6 x! N2 Z' n' @! _" I. r
StatusBar: 属 性(Boolean), 是 否 显 示 状 态 栏。
E5 ]0 u/ C4 d2 P; g StatusText: 属 性(WideString), 状 态 栏 内 容。# U2 E- D, \1 a: _6 B7 _9 z4 F1 y
ToolBar: 属 性(SYSINT), 工 具 栏 中 的 内 容。
) _# ]- s, F# B MenuBar: 属 性(Boolean), 是 否 显 示 菜 单 条。
& \* B4 ?7 X" I9 @ FullScreen: 属 性(Boolean), 是 否 全 屏 显 示。' L& U+ z# M; n. N
Offline: 属 性(Boolean), 是 否 脱 机 浏 览。3 w5 h' Q( ?! A4 u; Y9 Z1 @
AddressBar: 属 性(Boolean), 是 否 显 示 地 址 栏。
+ Y7 L% K- L& l! i5 {----TWebBrowser 的 常 见 事 件 主 要 有:
+ c+ ]0 e" v) y) U4 z7 m, J: P/ v% T- x----OnStatusTextChange = procedure(Sender: TObject; const Text: WideString) of object; a' L* } ]; H, z8 q4 j1 D
----在 状 态 栏 提 示 信 息 变 化 时 发 生, 参 数 Text 为 当 前 状 态 栏 提 示 信 息, 我 们 可 以 根 据 该 信 息 来 更 新 我 们 自 己 的 状 态 栏 提 示 信 息 或 处 理 其 它 的 事 务。
4 x7 x0 d1 Y6 j$ s" Y----OnProgressChange = procedure(Sender: TObject; Progress, ProgressMax: Integer) of object;
! d4 O0 V1 v6 T' z3 O6 n1 ^3 J) b2 r----在 打 开 页 面 的 进 度 变 化 时 发 生, 参 数 Progress 为 当 前 进 度,ProgressMax 为 总 进 度, 我 们 可 以 根 据 这 两 个 参 数 来 更 新 我 们 自 己 的 状 态 栏 提 示 信 息 或 处 理 其 它 的 事 务。
/ v6 O+ C7 U5 d3 s* U5 x% s2 H% M OnCommandStateChange = procedure(Sender: ; }7 M1 S) F6 q8 ~# ]
TObject; Command: Integer; Enable: WordBool) of object;
6 M" n5 q- A( F4 R$ h----当 执 行 新 的 命 令 时 发 生,Command 为 命 令 标 识,Enable 为 是 否 允 许 执 行 该 命 令。
6 Z& N1 h( S' q6 W z8 l, H OnTitleChange = procedure(Sender: TObject;7 t& U; A- {% n$ V7 G
const Text: WideString) of object;
N8 k4 S' c2 i----在 页 面 的 标 题 发 生 变 化 时 发 生,Text 为 当 前 标 题。
- C" `* m/ k" G. h$ \ OnPropertyChange = procedure(Sender: TObject;
9 j0 {" ~! m2 z! c$ o8 t const Property_: WideString) of object; 6 j2 W1 f0 `# G. f5 H, p+ @" P
----在 页 面 的 属 性 发 生 变 化 时 发 生,Property_ 为 属 性 名 称
9 z- i2 [2 R( j/ P OnDownloadComplete: TNotifyEvent
( g g8 H* J$ P5 X+ q% g- [ 在 下 载 页 面 完 成 后 发 生。
/ R5 Y2 c9 Y' z u* n OnDownloadBegin: TNotifyEvent
$ w, A/ b1 O1 ]+ H 在 下 载 页 面 开 始 前 发 生。 / P# _! _7 N/ g. e5 H
三、 两 个 例 子
) U% m: D8 P( z----1. 制 作 自 己 的 帮 助 系 统 6 W/ T3 E) h2 K8 {! S& Z, R
----我 们 利 用IE 浏 览 器 控 件 为 用 户 制 作 了 一 个 帮 助 系 统, 帮 助 文 件 由 多 个HTML 文 件 组 成, 一 个 主 题 对 应 一 个 HTML 文 件(Topic.HTM), 每 个 主 题 下 的 项 目 对 应HTML 文 件 中 的 一 个 标 签( #Item)。 这 样 在 我 们 的 系 统 中, 就 不 必 再 调 用IE 浏 览 器 或 WinHelp 程 序 来 为 用 户 提 供 帮 助 了。 相 信 大 家 知 道HTML 帮 助 文 件 与 传 统 的HLP 帮 助 文 件 相 比 的 优 势 所 在 吧。 ( g$ M) M0 n8 R. X! @
----在 下 面 例 子 中, 演 示 了TWebBrowser(IE4 浏 览 器 控 件) 的Navigate 方 法 的 使 用 方 法。 请 注 意 程 序 中 的 注 释。 下 面 为 程 序 的 主 要 片 段。{ 根 据 主 题 和 项 目 调 用 帮 助 文 件}
5 a$ W6 {! r8 F5 i5 m8 O3 j6 U$ Mprocedure ShowHelp( HelpTopic,HelpItem : String );: V% y. U0 Y3 U% } n1 y' ] L
var
/ v* |% R2 I# Z8 K' L TargetFrameName,PostData,Heads,Flags : OleVariant;% [# O# v& V4 P" ?
URL : widestring;" W& l& M+ u' j2 m- G& @5 Q
begin% t# j3 I1 p2 L1 Y4 }/ U& m
TargetFrameName := '';) ?; E3 }5 ^2 W
{ 指 定Frame 的 空 字 符 串 时, " n3 ]4 ?' \# i5 m$ A$ P+ h
则 在 当 前Frame 中 打 开 帮 助 文 件}! P9 X, }# e9 z% W# q& Z; \, I
PostData := false;{ 不 发 送 数 据}" _1 j- p% p" ?7 p1 L
Heads := '';{Header 信 息 为 空}
0 s( c: v, q0 }1 I Flags := 0;{Flags 设 为0}
& x1 n+ F; g0 X# s, p I1 T URL := HelpTopic + '.HTM #' +HelpItem;
$ }7 f; E- Q2 q+ n7 l8 q' G- u { 帮 助 信 息 的URL}
0 {' h: o8 X) `2 j with formHelp.webbrowser do
6 s* L2 ?* l Q1 P { 在 帮 助 窗 口 中 的IE 浏 览 器$ J" R, ]9 O; P
控 件 中 显 示 帮 助 信 息}: x" s) G( q9 [9 H, I/ z
begin" |. O& J( n, G3 l% z* u
navigate(URL,Flags,TargetFrameName,9 T2 o+ t6 x4 M" D( g* S( v
PostData,Heads);{ 显 示 帮 助 信 息}
5 Y1 @" P/ M N5 s end;
6 F% s2 }4 N& a+ _. C$ Yend; ; d3 J0 _$ {: N4 [) {( E: ^
----2. 显 示 一 个GIF 动 画 * D4 d# O; \0 d3 T( b0 h* g
----假 如 你 还 没 有 一 个 适 合 的 动 画 显 示 控 件, 不 妨 试 用 一 下 下 面 的 方 法。 3 h+ h3 {( P4 E6 I k
procedure ShowGIF( GIFFileName : String );
9 d. e8 I* @; E, ?4 ` U1 r7 avar
2 Z9 y, ?, z% S8 p6 X TargetFrameName,PostData,Heads,Flags : OleVariant;& B" l* v, g- l
URL : widestring;
7 f8 _# L n: }% f- nbegin- m7 ?- P0 O. T1 B4 g( N
TargetFrameName := '';" t" u+ {8 E K4 S8 s
{ 指 定Frame 的 空 字 符 串 时,
* b& j( h( `# E5 l 则 在 当 前Frame 中 打 开 动 画 文 件}
8 x( f2 i+ d3 T% R PostData := false;{ 不 发 送 数 据}2 A! a# E6 v# h# b& m/ _
Heads := '';{Header 信 息 为 空}
. r: p' f7 C9 a% s* O# {( m Flags := 0;{Flags 设 为0}
2 N8 C, R' `9 T3 [ URL := GIFFileName;
# o% H% ^% A* B2 { with formGIF.webbrowser do+ _- W; z: j9 p% { f
{ 在 指 定 窗 口 中 的IE 浏 览 器 控 件 中 显 示 动 画}1 I7 k& |. C9 ^8 B8 W! a' w' h
begin% T' v: k( j8 f
navigate(URL,Flags,TargetFrameName,Post ?8 \/ y K, e$ J) w1 _0 {
Data,Heads);{ 显 示 动 画 文 件}
0 u2 Z, t# e6 d% k2 d end;
9 L0 g) |3 U5 o8 E5 V9 _" r* wend;
+ @# g: a* W N* V7 W" L+ P---- 以 上 程 序 在PWIN98 +Delphi3.0 下 调 试 通 过。 ! f1 e1 n/ L% q$ a9 T- ]/ {) p
|