数学建模社区-数学中国

标题: 在 程 序 中 嵌 入 浏 览 器 [打印本页]

作者: 韩冰    时间: 2005-1-26 12:57
标题: 在 程 序 中 嵌 入 浏 览 器

5 B" v' n4 G% v7 q 深 圳 市 邮 政 储 汇 局(518040) / Z; C( v g) M- w% H王 发 军

* ]! v( Z6 n% j; V' i' S3 s

--------------------------------------------------------------------------------

# |: E, @* J5 m5 ]

一、 在Delphi 中 引 入IE 浏 览 器 控 件 ( t4 R* q2 k1 j' j; } ---- 由 于IE 浏 览 器 控 件 需 要 提 供 显 示 功 能 才 能 使 用, 所 以 不 能 在 程 序 中 用CreateOleObject 取 得 一 个 实 例 后 直 接 使 用 其 属 性 和 方 法, 否 则 程 序 在 运 行 时 会 引 起 错 误; 这 时 需 要 用Delphi 中 提 供 的"Import ActiveX Control" 功 能, 操 作 方 法 如 下 所 述。

( y7 j2 a8 e" h

----在"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, 其 中 有 这 三 个 控 件 的 包 装 细 节, 当 然 含 控 件 的 属 性 和 方 法 说 明 了, 它 可 以 作 为 我 们 使 用 控 件 的 参 考 资 料。

) H2 G/ w+ j% d* l

二、 使 用IE 浏 览 器 控 件 ( R+ T+ X8 X/ ^: y0 A# t----以TWebBrowser(IE4 浏 览 器 控 件) 为 例 子。

5 K* s0 ? k2 e1 r

----TWebBrowser 的 常 见 属 性 和 方 法 主 要 有:

, K- Z* a, O; Q. J) L9 y

GoBack: 方 法, 后 退 到 上 一 个 页 面。6 t Q/ k+ n J3 k/ H GoForward: 方 法, 前 进 到 下 一 个 页 面。 : Q5 F9 f, N* J, M GoHome: 方 法, 调 用 默 认 的 主 页 页 面,& \) T8 d5 m& {9 C& S' [1 p# f, \6 i 该 页 面 在IE 的 选 项 中 设 定。$ }' t- V# U7 U F; P7 h1 k ~. E GoSearch: 方 法, 调 用 默 认 的 搜 索 页 面, 3 y+ s7 U) p& w% i1 E8 M9 O 该 页 面 在IE 的 选 项 中 设 定。

0 X- l3 n* _+ O

---- Navigate(const URL: WideString; var Flags, TargetFrameName, PostData, Headers: OleVariant):方 法, 调 用 指 定 页 面, 具 体 参 数 如 下:

" {- F) ], r z! ]7 m7 C7 y

URL: 指 定 页 面 的URL。 ; K8 r* g6 k5 X2 a Flags:Word 类 型, 作 用 还 不 清 楚,3 H) W6 `' Z* I5 Q) c( ^$ G 可 设 为0。

4 A" l, |2 P" d/ c

---- TargetFrameName:WideString, 打 开 页 面 所 在 的Frame, 为 空 字 符 串 时 在 当 前 的Frame 中 打 开;TargetFrameName 指 定 的 Frame 存 在 时 在Frame 中 打 开;

7 g) C5 A7 X' d9 Y, U6 O* `" c

----TargetFrameName 指 定 的Frame 不 存 在 时 则 新 建 一 个 窗 口 打 开, 此 时 就 相 当 于 调 用 外 部 的IE 浏 览 器 了。

7 ^$ ^! ~) [) m0 M8 @ j' W4 ]. E

PostData:boolean, 是 否 允 许 发 送 数 据。0 O% T7 W- ^ F+ V1 |$ a2 @ Headers:WideString, 9 |& n' V; u) t$ n p# D4 C+ A8 j5 _ 要 发 送 的URL 请 求 的 头 部 数 据。 5 G6 S& e( s0 K5 @7 Y7 L1 U Refresh: 方 法, 刷 新 当 前 页 面。0 k$ W8 q% f1 d0 \6 o Stop: 方 法, 停 止 调 用 或 打 开 当 前 页 面。 . c0 y5 h/ Y$ ]/ _0 R LocationName: 属 性(WideString), 当 前 位 置 的 名 称。 : U, X( [1 F5 u* @# O LocationURL: 属 性(WideString), 当 前 位 置 的URL。 * X! g4 E- ?# q* [ Busy: 属 性(Boolean), 是 否 正 忙。* _( N. M5 T5 X% Z6 d Visible: 属 性(Boolean), 浏 览 器 窗 口 是 否 可 见。

9 F5 K( Y& n; @3 e- \9 H7 ~

---- ( 以 下 属 性 为 在TWebBrowser 新 增, TWebBrowser_V1 中 没 有, 其 作 用 有 待 探 索)

+ L- r9 x2 U) H$ [2 b' ^

StatusBar: 属 性(Boolean), 是 否 显 示 状 态 栏。 - [( ~& K2 K2 v( o) |* s3 h' b/ q StatusText: 属 性(WideString), 状 态 栏 内 容。+ {/ A3 H. ?: q q% i9 V ToolBar: 属 性(SYSINT), 工 具 栏 中 的 内 容。 ! d. h H1 p h; p MenuBar: 属 性(Boolean), 是 否 显 示 菜 单 条。 " ], R* M$ w; u+ t( s7 p7 g' a. I) f) J FullScreen: 属 性(Boolean), 是 否 全 屏 显 示。 ; D9 f- R; h: M Offline: 属 性(Boolean), 是 否 脱 机 浏 览。 8 o; a/ Z9 _+ `+ g2 Y5 F AddressBar: 属 性(Boolean), 是 否 显 示 地 址 栏。

: i* W% z2 W/ |* A. Q

----TWebBrowser 的 常 见 事 件 主 要 有:

- Y3 Y+ a0 p5 L. w& Y

----OnStatusTextChange = procedure(Sender: TObject; const Text: WideString) of object;

' b( e8 r/ c. N( G4 r6 V

----在 状 态 栏 提 示 信 息 变 化 时 发 生, 参 数 Text 为 当 前 状 态 栏 提 示 信 息, 我 们 可 以 根 据 该 信 息 来 更 新 我 们 自 己 的 状 态 栏 提 示 信 息 或 处 理 其 它 的 事 务。

# j3 k' E% Y/ [! C9 B" t

----OnProgressChange = procedure(Sender: TObject; Progress, ProgressMax: Integer) of object;

- m* x) B6 c8 I1 N( M$ E, w2 n/ T

----在 打 开 页 面 的 进 度 变 化 时 发 生, 参 数 Progress 为 当 前 进 度,ProgressMax 为 总 进 度, 我 们 可 以 根 据 这 两 个 参 数 来 更 新 我 们 自 己 的 状 态 栏 提 示 信 息 或 处 理 其 它 的 事 务。

' b y" J q# R$ A. ]$ B% A6 r

OnCommandStateChange = procedure(Sender: ' F" c( z/ o+ V1 r b; ]TObject; Command: Integer; Enable: WordBool) of object;

/ X8 a2 P& g# O2 |

----当 执 行 新 的 命 令 时 发 生,Command 为 命 令 标 识,Enable 为 是 否 允 许 执 行 该 命 令。

u5 ]8 v: g1 N, o/ a* S0 T

OnTitleChange = procedure(Sender: TObject;# {2 _: @, w+ p/ S const Text: WideString) of object;

) I4 l! Y( ~* l& t. q. ?& [

----在 页 面 的 标 题 发 生 变 化 时 发 生,Text 为 当 前 标 题。

4 ^) f8 @5 F7 G/ C3 U

OnPropertyChange = procedure(Sender: TObject; 7 T% I$ E" x; Z- s const Property_: WideString) of object;

& W6 _( j7 O0 D

----在 页 面 的 属 性 发 生 变 化 时 发 生,Property_ 为 属 性 名 称

F( g3 R- Y6 e% [' O4 e

OnDownloadComplete: TNotifyEvent 2 F' q! V- N/ a9 c' }% u. `7 w% Y 在 下 载 页 面 完 成 后 发 生。: R" |. S, P* f) k* X5 d8 e( _& t OnDownloadBegin: TNotifyEvent6 W' @" L1 w' b, a     在 下 载 页 面 开 始 前 发 生。

7 x, k1 B: l- c& {

三、 两 个 例 子 2 S( w' V2 @4 y! k ----1. 制 作 自 己 的 帮 助 系 统

& J* _- d) f) k& m0 R

----我 们 利 用IE 浏 览 器 控 件 为 用 户 制 作 了 一 个 帮 助 系 统, 帮 助 文 件 由 多 个HTML 文 件 组 成, 一 个 主 题 对 应 一 个 HTML 文 件(Topic.HTM), 每 个 主 题 下 的 项 目 对 应HTML 文 件 中 的 一 个 标 签( #Item)。 这 样 在 我 们 的 系 统 中, 就 不 必 再 调 用IE 浏 览 器 或 WinHelp 程 序 来 为 用 户 提 供 帮 助 了。 相 信 大 家 知 道HTML 帮 助 文 件 与 传 统 的HLP 帮 助 文 件 相 比 的 优 势 所 在 吧。

( F) l5 _3 r( w1 P& s. i0 F" a

----在 下 面 例 子 中, 演 示 了TWebBrowser(IE4 浏 览 器 控 件) 的Navigate 方 法 的 使 用 方 法。 请 注 意 程 序 中 的 注 释。 下 面 为 程 序 的 主 要 片 段。{ 根 据 主 题 和 项 目 调 用 帮 助 文 件}

' l+ ^+ O5 s0 \$ `- K3 B8 z: t

procedure ShowHelp( HelpTopic,HelpItem : String );5 O0 | s2 A9 v% K0 X5 s& v9 E var / }+ E. c3 s3 ? TargetFrameName,PostData,Heads,Flags : OleVariant; 5 e. n8 G6 O+ u' I/ D7 c5 p URL : widestring; ; m( Q" f4 D- W: `$ Jbegin 3 m6 P* ^4 m3 | TargetFrameName := '';1 w: K9 B! c, T Z' b8 }0 k { 指 定Frame 的 空 字 符 串 时, . C! P1 h) D# \) e" y# J6 N1 _' V& D 则 在 当 前Frame 中 打 开 帮 助 文 件} 1 t, u) U }# L2 b4 X: j6 h: a; r PostData := false;{ 不 发 送 数 据} # ?* j' Q p7 @+ D* r- g7 `8 C Heads := '';{Header 信 息 为 空} 9 c! `/ J9 o2 e( r) l; b6 o Flags := 0;{Flags 设 为0} ' x3 N% P8 t+ M2 S# F URL := HelpTopic + '.HTM #' +HelpItem; . \9 }2 J9 ~$ S! a, ]2 K S% i, n9 w2 g { 帮 助 信 息 的URL} & v- ]( o( ^4 ?! I with formHelp.webbrowser do - R6 t Z& C- m W1 R# Q" Z. ~ E { 在 帮 助 窗 口 中 的IE 浏 览 器 6 r1 B0 y$ [7 y- W1 d4 K 控 件 中 显 示 帮 助 信 息}3 ~7 X; } z! d6 p* K' _ begin 3 h9 F% P- Q' A0 G# K; q navigate(URL,Flags,TargetFrameName, + u4 j# r% J3 [: QPostData,Heads);{ 显 示 帮 助 信 息}' B4 v; R/ L. N4 F1 T, M end; % v9 b9 V3 `1 x3 Rend;

( B2 N+ Q+ g6 z$ P4 p% z' w/ z

----2. 显 示 一 个GIF 动 画

" ]- b- J9 T( ^8 H3 ]$ E

----假 如 你 还 没 有 一 个 适 合 的 动 画 显 示 控 件, 不 妨 试 用 一 下 下 面 的 方 法。

$ g6 r* r N: G8 ]# T9 {0 e

procedure ShowGIF( GIFFileName : String ); & D3 _, k' w4 A7 b6 F pvar 8 _( s* E2 y# w0 h' P* G/ g! D, }5 S TargetFrameName,PostData,Heads,Flags : OleVariant; 2 c/ _+ s! F. O; _ URL : widestring;: x* r3 C" |1 G/ {9 E7 @" r3 [ begin , g" T" X9 P$ ^9 D) _ TargetFrameName := ''; . K* N) D8 X# i2 | { 指 定Frame 的 空 字 符 串 时, 3 e7 ]4 f) W! r' H, L5 ?" q2 V 则 在 当 前Frame 中 打 开 动 画 文 件} 6 m- C5 u" q! x* ^: A1 J5 S PostData := false;{ 不 发 送 数 据} " M# Z/ V+ X2 T2 b* g4 x; z3 j' E4 t Heads := '';{Header 信 息 为 空}# D: c6 i, E3 k" V! b' M' h Flags := 0;{Flags 设 为0}" t% P' N& b8 ?8 p" L, R0 G URL := GIFFileName;6 i- c6 o: _& d/ D4 o/ I8 p with formGIF.webbrowser do" T9 ~; O Z- Z N# u$ g! O, l, H7 N { 在 指 定 窗 口 中 的IE 浏 览 器 控 件 中 显 示 动 画}2 @0 U# X: a) l( f begin # Y p6 [- J J F navigate(URL,Flags,TargetFrameName,Post ? 5 u( X _' }0 ^5 pData,Heads);{ 显 示 动 画 文 件}7 x& j8 b! q1 u: G1 F end;. S# }/ _# h9 h' v end;

( H8 f# A- \( w4 x! L. W6 w

---- 以 上 程 序 在PWIN98 +Delphi3.0 下 调 试 通 过。 ( Z) y" c2 U! M






欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5