|
Q; P% a0 c2 p1 J. o" b" @; }2 L
深 圳 市 邮 政 储 汇 局(518040)2 E5 _$ ]6 R, U+ i; w2 ^2 o( w2 V
王 发 军 6 l- W( Z, Z8 q# P' w
--------------------------------------------------------------------------------
% A6 b X/ ?) B$ P5 t( p一、 在Delphi 中 引 入IE 浏 览 器 控 件 3 O0 x! A6 v( m- ~ `8 m
---- 由 于IE 浏 览 器 控 件 需 要 提 供 显 示 功 能 才 能 使 用, 所 以 不 能 在 程 序 中 用CreateOleObject 取 得 一 个 实 例 后 直 接 使 用 其 属 性 和 方 法, 否 则 程 序 在 运 行 时 会 引 起 错 误; 这 时 需 要 用Delphi 中 提 供 的"Import ActiveX Control" 功 能, 操 作 方 法 如 下 所 述。
0 \: l0 A- \3 c& m4 L1 K----在"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, 其 中 有 这 三 个 控 件 的 包 装 细 节, 当 然 含 控 件 的 属 性 和 方 法 说 明 了, 它 可 以 作 为 我 们 使 用 控 件 的 参 考 资 料。
. W6 _, O8 o9 e/ ]4 U0 E二、 使 用IE 浏 览 器 控 件 # Q. L/ |- G+ ]) o7 T; M1 W4 e# c
----以TWebBrowser(IE4 浏 览 器 控 件) 为 例 子。
* x0 ~7 k7 t% \% g: g# B----TWebBrowser 的 常 见 属 性 和 方 法 主 要 有: - L) N& H# E# t% x
GoBack: 方 法, 后 退 到 上 一 个 页 面。 s! K0 e2 t+ U7 q3 e ~! N
GoForward: 方 法, 前 进 到 下 一 个 页 面。/ E: X3 a; B3 @% T# A. k
GoHome: 方 法, 调 用 默 认 的 主 页 页 面,) o3 k/ k' i- @" G2 M
该 页 面 在IE 的 选 项 中 设 定。) U* @$ _) B+ v/ n
GoSearch: 方 法, 调 用 默 认 的 搜 索 页 面,
9 d5 L, n9 c: z2 K7 g 该 页 面 在IE 的 选 项 中 设 定。 - V* }3 G3 Q" \0 Q+ h2 v
---- Navigate(const URL: WideString; var Flags, TargetFrameName, PostData, Headers: OleVariant):方 法, 调 用 指 定 页 面, 具 体 参 数 如 下:
7 Y1 r* Y1 y/ }& r" { URL: 指 定 页 面 的URL。
# d. v7 @ f5 V Flags:Word 类 型, 作 用 还 不 清 楚,9 j* p. X5 \- d: A7 m3 d% f4 @
可 设 为0。
7 G3 B5 ?: ?, q; r---- TargetFrameName:WideString, 打 开 页 面 所 在 的Frame, 为 空 字 符 串 时 在 当 前 的Frame 中 打 开;TargetFrameName 指 定 的 Frame 存 在 时 在Frame 中 打 开; 7 Q: s, g K/ H! Q& v1 b
----TargetFrameName 指 定 的Frame 不 存 在 时 则 新 建 一 个 窗 口 打 开, 此 时 就 相 当 于 调 用 外 部 的IE 浏 览 器 了。
$ ^! L# y) t$ W* i PostData:boolean, 是 否 允 许 发 送 数 据。" i: [9 D4 s. L# A; z+ _+ ?7 j
Headers:WideString,' l+ Q3 Y' h0 B% ?6 L
要 发 送 的URL 请 求 的 头 部 数 据。
: e" d' h+ } W9 @$ p; y Refresh: 方 法, 刷 新 当 前 页 面。# r* M' m9 t2 i# q9 B8 G
Stop: 方 法, 停 止 调 用 或 打 开 当 前 页 面。3 o1 W- e/ h6 |8 n0 d
LocationName: 属 性(WideString), 当 前 位 置 的 名 称。5 U [% I# z0 I1 V- H
LocationURL: 属 性(WideString), 当 前 位 置 的URL。3 g" z2 g# I- D2 L
Busy: 属 性(Boolean), 是 否 正 忙。% q0 `& a. }! F+ X+ `
Visible: 属 性(Boolean), 浏 览 器 窗 口 是 否 可 见。 ! T. F( i* ^$ Y2 E1 I
---- ( 以 下 属 性 为 在TWebBrowser 新 增, TWebBrowser_V1 中 没 有, 其 作 用 有 待 探 索)
' ~! E# ]# m9 e/ D% ?9 _ StatusBar: 属 性(Boolean), 是 否 显 示 状 态 栏。$ \9 A6 k0 \$ i7 ?; h
StatusText: 属 性(WideString), 状 态 栏 内 容。
) Q3 A) p) o( H" E. o ToolBar: 属 性(SYSINT), 工 具 栏 中 的 内 容。, Z1 N# i0 |7 N0 Q6 l t' X3 ?
MenuBar: 属 性(Boolean), 是 否 显 示 菜 单 条。3 e# m) ]4 B2 M1 ?! w$ M$ g! w; M" V
FullScreen: 属 性(Boolean), 是 否 全 屏 显 示。6 R/ o+ j w9 R; A& m7 d% R
Offline: 属 性(Boolean), 是 否 脱 机 浏 览。
0 {& q8 x% t7 t" O! O% l" S+ Q AddressBar: 属 性(Boolean), 是 否 显 示 地 址 栏。
' i$ d* g- I4 |( v7 g6 z----TWebBrowser 的 常 见 事 件 主 要 有:
1 S n" |7 S. e" g# v----OnStatusTextChange = procedure(Sender: TObject; const Text: WideString) of object;
+ v3 c: c" a6 t1 J: j- `: ~5 j% d0 H----在 状 态 栏 提 示 信 息 变 化 时 发 生, 参 数 Text 为 当 前 状 态 栏 提 示 信 息, 我 们 可 以 根 据 该 信 息 来 更 新 我 们 自 己 的 状 态 栏 提 示 信 息 或 处 理 其 它 的 事 务。 6 D* O* R' c6 {7 Q8 U( {
----OnProgressChange = procedure(Sender: TObject; Progress, ProgressMax: Integer) of object; , P! ^4 f5 P1 x+ q* K+ ?- p u; F* K- n
----在 打 开 页 面 的 进 度 变 化 时 发 生, 参 数 Progress 为 当 前 进 度,ProgressMax 为 总 进 度, 我 们 可 以 根 据 这 两 个 参 数 来 更 新 我 们 自 己 的 状 态 栏 提 示 信 息 或 处 理 其 它 的 事 务。 2 P$ t, ]0 R& Q1 B
OnCommandStateChange = procedure(Sender:
5 v, A' a) C1 f) n1 s9 qTObject; Command: Integer; Enable: WordBool) of object; * U/ Q2 T1 q, A7 q2 K: |% p
----当 执 行 新 的 命 令 时 发 生,Command 为 命 令 标 识,Enable 为 是 否 允 许 执 行 该 命 令。 5 W, l' d0 I0 o6 D
OnTitleChange = procedure(Sender: TObject;7 E: s; h7 G% ]: b5 d" `; r& e
const Text: WideString) of object;
u5 M! w; j- g) e----在 页 面 的 标 题 发 生 变 化 时 发 生,Text 为 当 前 标 题。 ) G) o2 i+ a& Q9 L9 m
OnPropertyChange = procedure(Sender: TObject;
g1 C+ s& L- c! I- s t const Property_: WideString) of object; 5 C# r+ V5 w! [# t/ V1 o4 x) O
----在 页 面 的 属 性 发 生 变 化 时 发 生,Property_ 为 属 性 名 称
, }8 J- `3 E% N3 c: p% W OnDownloadComplete: TNotifyEvent0 z6 D+ _/ u x
在 下 载 页 面 完 成 后 发 生。/ i; Q6 E9 k4 w
OnDownloadBegin: TNotifyEvent
5 v/ D2 s* a/ H; Q 在 下 载 页 面 开 始 前 发 生。
4 z( D. ] k j6 z三、 两 个 例 子
' d! c0 b8 j$ D----1. 制 作 自 己 的 帮 助 系 统
: a- ?& {+ R, k' h----我 们 利 用IE 浏 览 器 控 件 为 用 户 制 作 了 一 个 帮 助 系 统, 帮 助 文 件 由 多 个HTML 文 件 组 成, 一 个 主 题 对 应 一 个 HTML 文 件(Topic.HTM), 每 个 主 题 下 的 项 目 对 应HTML 文 件 中 的 一 个 标 签( #Item)。 这 样 在 我 们 的 系 统 中, 就 不 必 再 调 用IE 浏 览 器 或 WinHelp 程 序 来 为 用 户 提 供 帮 助 了。 相 信 大 家 知 道HTML 帮 助 文 件 与 传 统 的HLP 帮 助 文 件 相 比 的 优 势 所 在 吧。 9 j$ E1 @0 y3 j; x! q8 A
----在 下 面 例 子 中, 演 示 了TWebBrowser(IE4 浏 览 器 控 件) 的Navigate 方 法 的 使 用 方 法。 请 注 意 程 序 中 的 注 释。 下 面 为 程 序 的 主 要 片 段。{ 根 据 主 题 和 项 目 调 用 帮 助 文 件}
% ^' X9 E- b3 r# [ V3 Q' C( Bprocedure ShowHelp( HelpTopic,HelpItem : String );
$ G M1 N7 J! |* M xvar
) a/ U8 Y+ K# O! i TargetFrameName,PostData,Heads,Flags : OleVariant;
5 J1 K1 X; a; A URL : widestring;
7 C/ c( u, F8 V- x1 vbegin* s8 q9 J% t: u1 u# f. r9 E
TargetFrameName := '';
6 s1 X7 W. K9 x( ~& i+ g) f0 A) m( V { 指 定Frame 的 空 字 符 串 时,
2 i; @2 Q5 {- G 则 在 当 前Frame 中 打 开 帮 助 文 件}
3 \0 o+ p$ H& t6 m PostData := false;{ 不 发 送 数 据}4 } x& o8 b; u r3 c
Heads := '';{Header 信 息 为 空}" y" \$ g1 Y+ a. v; N
Flags := 0;{Flags 设 为0}5 o: G) i. s! T% q& r1 K5 \
URL := HelpTopic + '.HTM #' +HelpItem; r4 S4 ?- k# T
{ 帮 助 信 息 的URL}
/ j* _! \1 p2 g* B with formHelp.webbrowser do
5 X$ Z7 L6 R- T { 在 帮 助 窗 口 中 的IE 浏 览 器# B$ r" \5 \- t/ c- W
控 件 中 显 示 帮 助 信 息}
: B" {1 A k: P begin# C# R1 k: S% Q$ D4 ~
navigate(URL,Flags,TargetFrameName,
/ t- b, o2 ~, N$ M( {* _/ vPostData,Heads);{ 显 示 帮 助 信 息}8 F) G0 p' Z7 ^7 i7 V+ j' E
end;
0 e. G5 ^) u0 M/ U4 f* rend; & F& u4 V4 {) X+ e1 V t
----2. 显 示 一 个GIF 动 画 . f3 z4 D9 ^$ q5 ~) V4 Z, X# g
----假 如 你 还 没 有 一 个 适 合 的 动 画 显 示 控 件, 不 妨 试 用 一 下 下 面 的 方 法。
) ?" j; N4 }, q/ gprocedure ShowGIF( GIFFileName : String );
: r- Z J, E6 n( O. L( Xvar
/ u* \% _ L" | c6 l TargetFrameName,PostData,Heads,Flags : OleVariant;) f9 D- t. b/ s( Z r
URL : widestring;4 e/ w( r0 o5 V* H, q
begin
* l V- q' g, d! S$ ] TargetFrameName := '';3 u( l9 }& F/ t0 F
{ 指 定Frame 的 空 字 符 串 时,
0 d3 L) I7 c5 R$ |: `% u P, m7 ?2 x 则 在 当 前Frame 中 打 开 动 画 文 件}$ B! e( {6 @3 K1 B( Q9 ]
PostData := false;{ 不 发 送 数 据}! @2 U, {. c* H( g9 ^
Heads := '';{Header 信 息 为 空}/ e' S) ^' f" Y7 N4 z6 @
Flags := 0;{Flags 设 为0}
( x5 v" N+ d: J+ O, {6 y4 d URL := GIFFileName;8 ?# v3 E5 v4 Z/ P) X2 X
with formGIF.webbrowser do3 _2 [9 t0 p' J/ C* I* u. d& r
{ 在 指 定 窗 口 中 的IE 浏 览 器 控 件 中 显 示 动 画} y, d1 t. B2 l+ V
begin
2 S" c- \ `+ c9 P7 b navigate(URL,Flags,TargetFrameName,Post ?
' Y* x/ l, `8 i: g! \/ dData,Heads);{ 显 示 动 画 文 件}
, x9 Q- p; H9 H! L1 h7 ]2 E end;
( {8 `9 \4 K3 J; b2 Z3 Yend;
7 d8 x- N2 S$ J7 q! |---- 以 上 程 序 在PWIN98 +Delphi3.0 下 调 试 通 过。
}* J( k, _4 x8 A0 v( F; X |