|
0 P0 N& c" }3 c( J深 圳 市 邮 政 储 汇 局(518040)
6 k# ?- W$ I6 r v: J" v4 H7 w/ d王 发 军 0 G; p, z' d; O7 A# P9 c
--------------------------------------------------------------------------------
- `2 L0 L8 p. t; Y一、 在Delphi 中 引 入IE 浏 览 器 控 件
, ]2 I" G2 X0 q) @% p---- 由 于IE 浏 览 器 控 件 需 要 提 供 显 示 功 能 才 能 使 用, 所 以 不 能 在 程 序 中 用CreateOleObject 取 得 一 个 实 例 后 直 接 使 用 其 属 性 和 方 法, 否 则 程 序 在 运 行 时 会 引 起 错 误; 这 时 需 要 用Delphi 中 提 供 的"Import ActiveX Control" 功 能, 操 作 方 法 如 下 所 述。 & A2 N1 K+ q# ^: k3 X2 [
----在"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, 其 中 有 这 三 个 控 件 的 包 装 细 节, 当 然 含 控 件 的 属 性 和 方 法 说 明 了, 它 可 以 作 为 我 们 使 用 控 件 的 参 考 资 料。
5 `9 {) ~9 s. Z `二、 使 用IE 浏 览 器 控 件
6 `9 | _) X. B8 K+ J----以TWebBrowser(IE4 浏 览 器 控 件) 为 例 子。
! J9 [6 u0 q' f& d2 a& D----TWebBrowser 的 常 见 属 性 和 方 法 主 要 有:
! O2 m* ~5 T Z GoBack: 方 法, 后 退 到 上 一 个 页 面。& Z) ^5 L- n( ?0 Y) ` t
GoForward: 方 法, 前 进 到 下 一 个 页 面。
% {* r7 u# J9 Z5 o' T GoHome: 方 法, 调 用 默 认 的 主 页 页 面,& p" W/ r5 U; Z, B, H
该 页 面 在IE 的 选 项 中 设 定。! v' [% ]/ j& j. {# J
GoSearch: 方 法, 调 用 默 认 的 搜 索 页 面, : ~3 @* z" p( d) A4 N* V$ [4 f
该 页 面 在IE 的 选 项 中 设 定。
* a( h( n. b4 Y1 n' U---- Navigate(const URL: WideString; var Flags, TargetFrameName, PostData, Headers: OleVariant):方 法, 调 用 指 定 页 面, 具 体 参 数 如 下:
$ v* s D) `9 Z7 l6 Q5 S0 P5 I- I URL: 指 定 页 面 的URL。9 N4 |7 O p; G& F) d4 y
Flags:Word 类 型, 作 用 还 不 清 楚,, ?, _$ K# X& H2 j* Z* ]
可 设 为0。 $ D3 J$ p, H1 {$ p" }+ s- C& |
---- TargetFrameName:WideString, 打 开 页 面 所 在 的Frame, 为 空 字 符 串 时 在 当 前 的Frame 中 打 开;TargetFrameName 指 定 的 Frame 存 在 时 在Frame 中 打 开; 7 d3 C5 H( d2 R0 u4 |
----TargetFrameName 指 定 的Frame 不 存 在 时 则 新 建 一 个 窗 口 打 开, 此 时 就 相 当 于 调 用 外 部 的IE 浏 览 器 了。 : D% k- W/ S- q5 a d
PostData:boolean, 是 否 允 许 发 送 数 据。 G) e8 F8 }% m5 z& k t" v
Headers:WideString,
B# C2 I& n8 g7 | 要 发 送 的URL 请 求 的 头 部 数 据。
3 e8 [% S0 z6 d8 w" h Refresh: 方 法, 刷 新 当 前 页 面。; B" r* C- s9 S' B! n' ^# t
Stop: 方 法, 停 止 调 用 或 打 开 当 前 页 面。% y! O! L- s/ e. n0 E1 h* B- y: b
LocationName: 属 性(WideString), 当 前 位 置 的 名 称。- T( Y$ E) h4 V8 t3 v* R
LocationURL: 属 性(WideString), 当 前 位 置 的URL。/ u% g0 n# j9 x! z2 `' D) k9 Z/ a
Busy: 属 性(Boolean), 是 否 正 忙。* |+ G# t/ E: n# E6 d
Visible: 属 性(Boolean), 浏 览 器 窗 口 是 否 可 见。
3 n" D" F N6 F1 P! ^' @---- ( 以 下 属 性 为 在TWebBrowser 新 增, TWebBrowser_V1 中 没 有, 其 作 用 有 待 探 索) 3 ]: C& q% l& @9 X5 z8 \" w
StatusBar: 属 性(Boolean), 是 否 显 示 状 态 栏。3 A: d. }7 E# S6 [. H# ?
StatusText: 属 性(WideString), 状 态 栏 内 容。 B6 n7 K/ ]" E* p( x
ToolBar: 属 性(SYSINT), 工 具 栏 中 的 内 容。
( d6 }9 ]& G. q. B0 E# c: B MenuBar: 属 性(Boolean), 是 否 显 示 菜 单 条。
% x/ [ R( A% t; b$ g$ }( b FullScreen: 属 性(Boolean), 是 否 全 屏 显 示。" `# K- o( L% r" T
Offline: 属 性(Boolean), 是 否 脱 机 浏 览。
+ {6 s; N# y T' W. W! o) O% ] AddressBar: 属 性(Boolean), 是 否 显 示 地 址 栏。 7 A% ]8 \% P* G
----TWebBrowser 的 常 见 事 件 主 要 有: / G6 G2 t; R5 W h! o
----OnStatusTextChange = procedure(Sender: TObject; const Text: WideString) of object; ! B$ W3 b' G5 C& Z5 h$ {
----在 状 态 栏 提 示 信 息 变 化 时 发 生, 参 数 Text 为 当 前 状 态 栏 提 示 信 息, 我 们 可 以 根 据 该 信 息 来 更 新 我 们 自 己 的 状 态 栏 提 示 信 息 或 处 理 其 它 的 事 务。
' D- V X- D( A1 b8 z9 L6 C----OnProgressChange = procedure(Sender: TObject; Progress, ProgressMax: Integer) of object; : R" s" z7 r. Q7 i; J4 [5 z c
----在 打 开 页 面 的 进 度 变 化 时 发 生, 参 数 Progress 为 当 前 进 度,ProgressMax 为 总 进 度, 我 们 可 以 根 据 这 两 个 参 数 来 更 新 我 们 自 己 的 状 态 栏 提 示 信 息 或 处 理 其 它 的 事 务。 ' W: G" |( E* G4 i+ u
OnCommandStateChange = procedure(Sender:
$ \3 ~/ b7 i7 s7 Q/ d4 pTObject; Command: Integer; Enable: WordBool) of object; 6 l7 h3 m- a2 `1 s: V$ {0 A! e
----当 执 行 新 的 命 令 时 发 生,Command 为 命 令 标 识,Enable 为 是 否 允 许 执 行 该 命 令。
% V8 G. ^. p' h2 D7 x; a v OnTitleChange = procedure(Sender: TObject;* E! ~1 b! z( W) p K
const Text: WideString) of object; 0 i. z& I# B6 X/ r
----在 页 面 的 标 题 发 生 变 化 时 发 生,Text 为 当 前 标 题。
6 ^! _& L/ N) A l OnPropertyChange = procedure(Sender: TObject;# |/ G+ s/ T$ l1 W6 \
const Property_: WideString) of object;
; p& t) \% N+ z9 U2 v( `----在 页 面 的 属 性 发 生 变 化 时 发 生,Property_ 为 属 性 名 称 7 ? r8 u; z H/ f; v! v
OnDownloadComplete: TNotifyEvent
9 q& I8 H7 i. w% G9 d. v6 q8 Q 在 下 载 页 面 完 成 后 发 生。9 _3 c" `8 @; \% g3 J: R
OnDownloadBegin: TNotifyEvent
. Z5 ?) N; ^( J 在 下 载 页 面 开 始 前 发 生。
3 {( |. g; i7 h9 u& {! p三、 两 个 例 子 3 t6 n T# L/ A9 s3 d' ~' y0 [) P
----1. 制 作 自 己 的 帮 助 系 统
. S7 t* l+ C; H3 C----我 们 利 用IE 浏 览 器 控 件 为 用 户 制 作 了 一 个 帮 助 系 统, 帮 助 文 件 由 多 个HTML 文 件 组 成, 一 个 主 题 对 应 一 个 HTML 文 件(Topic.HTM), 每 个 主 题 下 的 项 目 对 应HTML 文 件 中 的 一 个 标 签( #Item)。 这 样 在 我 们 的 系 统 中, 就 不 必 再 调 用IE 浏 览 器 或 WinHelp 程 序 来 为 用 户 提 供 帮 助 了。 相 信 大 家 知 道HTML 帮 助 文 件 与 传 统 的HLP 帮 助 文 件 相 比 的 优 势 所 在 吧。
3 {' s2 H1 f" `3 `----在 下 面 例 子 中, 演 示 了TWebBrowser(IE4 浏 览 器 控 件) 的Navigate 方 法 的 使 用 方 法。 请 注 意 程 序 中 的 注 释。 下 面 为 程 序 的 主 要 片 段。{ 根 据 主 题 和 项 目 调 用 帮 助 文 件} ( G3 W& V2 t: I3 G; o# g
procedure ShowHelp( HelpTopic,HelpItem : String );+ T: i& F: j' ~8 k
var$ ?' p$ z( j3 I0 Y1 {% J# ]
TargetFrameName,PostData,Heads,Flags : OleVariant;; P ?( }/ T0 E
URL : widestring;
8 K, ~4 I/ U( d5 U2 T, abegin
: E8 ^) o9 k/ k TargetFrameName := '';2 V3 u6 Q! q( ~" O2 B
{ 指 定Frame 的 空 字 符 串 时, " z5 `* m# t6 G" i9 F8 F! d D7 V/ [4 `, R
则 在 当 前Frame 中 打 开 帮 助 文 件}
% A: [: r3 _8 O- D n5 @) ?7 a' [ PostData := false;{ 不 发 送 数 据}* | [' @5 O+ C: D% G ?: e9 h0 F
Heads := '';{Header 信 息 为 空}
/ k- O2 A- {% A2 a9 p- V: W9 g A Flags := 0;{Flags 设 为0}
0 ~% w H/ e1 _9 f0 m3 T8 B URL := HelpTopic + '.HTM #' +HelpItem;7 ~: g5 \- U. Q; u7 L2 t9 Q5 N
{ 帮 助 信 息 的URL}& n. }8 c! U) \6 [. M' n
with formHelp.webbrowser do/ b( Q. w5 m% b. r" H* h3 D
{ 在 帮 助 窗 口 中 的IE 浏 览 器
3 n( a. h( M( \$ X0 `( Q# y$ S 控 件 中 显 示 帮 助 信 息}
* q: Z& u9 w# U& f' c+ o begin
" i8 F( q3 a' [# m navigate(URL,Flags,TargetFrameName, p* T) b& M! M( }: C
PostData,Heads);{ 显 示 帮 助 信 息}
) k e- X2 C5 r7 _0 n+ [ end;
0 R F6 T) l2 U1 d9 F) vend; 2 R2 V& h! G7 [6 ?5 _) p
----2. 显 示 一 个GIF 动 画 ' F4 }$ a5 |" Z3 Z7 e
----假 如 你 还 没 有 一 个 适 合 的 动 画 显 示 控 件, 不 妨 试 用 一 下 下 面 的 方 法。 & W$ w) b. v" G2 p* L/ @1 {
procedure ShowGIF( GIFFileName : String );& y) w' S. r3 d1 g9 r0 J
var, J7 J% g9 Z$ ?$ F
TargetFrameName,PostData,Heads,Flags : OleVariant;; h4 \' ?/ |" a4 n& Q
URL : widestring;
" A: ^. r) M# |& c3 Z. E5 _begin
; x0 E( ?' T$ ] TargetFrameName := '';- p5 S5 v3 q) o6 E! `( i. M3 l
{ 指 定Frame 的 空 字 符 串 时,
* ]- [5 A Y2 L- Q" C 则 在 当 前Frame 中 打 开 动 画 文 件}. j2 n/ z: ^2 P# |
PostData := false;{ 不 发 送 数 据}* O: g$ s$ w4 ^; {4 i- L
Heads := '';{Header 信 息 为 空}/ r/ ], Q4 k& f
Flags := 0;{Flags 设 为0}
) A/ j: C$ ~: Q# C- T3 S6 J URL := GIFFileName;
2 J( e5 w, _' ~1 i5 z with formGIF.webbrowser do& f' M ]8 L( j8 Z
{ 在 指 定 窗 口 中 的IE 浏 览 器 控 件 中 显 示 动 画}
. j: f/ T; p) _) p' {) v begin
5 l- h# O& _4 Q( ` navigate(URL,Flags,TargetFrameName,Post ?
5 x2 T' ?* V3 w' g8 X0 S7 ^Data,Heads);{ 显 示 动 画 文 件}4 E$ V# I! S4 n8 B5 H
end;
6 G1 @$ R! J7 V0 ^end;
6 n" q! g0 Q3 x) C* ^---- 以 上 程 序 在PWIN98 +Delphi3.0 下 调 试 通 过。
' ^3 l8 b, {6 ? |