数学建模社区-数学中国

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

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

8 v$ b3 d9 x) m深 圳 市 邮 政 储 汇 局(518040) 7 A6 ? H1 `8 c6 H+ N9 U z王 发 军

+ `* W/ B- O* ^' i1 `1 X

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

$ H9 x8 I9 _: B2 V

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

/ K0 A5 \7 i2 C

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

% U9 D( Z( C- x8 s' D

二、 使 用IE 浏 览 器 控 件 " ^: v' u! y! r7 I7 ? ----以TWebBrowser(IE4 浏 览 器 控 件) 为 例 子。

4 v4 b) |" R" w/ m

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

* }' t2 W9 I& ]7 A

GoBack: 方 法, 后 退 到 上 一 个 页 面。 9 Z4 q8 I0 y& N2 e& b( U GoForward: 方 法, 前 进 到 下 一 个 页 面。 . z% }' i! w6 q# W GoHome: 方 法, 调 用 默 认 的 主 页 页 面,6 k4 Z8 b5 z# Z 该 页 面 在IE 的 选 项 中 设 定。5 N* ]; ?7 { M GoSearch: 方 法, 调 用 默 认 的 搜 索 页 面, * t! H5 v/ f2 v5 N$ X' r2 ^6 J9 ` 该 页 面 在IE 的 选 项 中 设 定。

# N! t/ V: p9 y

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

3 [8 {$ \1 l1 ~: z3 L; V) o! T

URL: 指 定 页 面 的URL。 2 Z! b: x B8 j) Y6 m, u" A0 r9 D Flags:Word 类 型, 作 用 还 不 清 楚,9 n" |8 Y8 }1 p 可 设 为0。

& Z' j! C9 [1 J4 \9 }0 C

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

8 @# G* ~- \7 o7 \; ]+ M- r0 K+ m

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

* N8 A8 g# D" i* }; o4 }: r

PostData:boolean, 是 否 允 许 发 送 数 据。 * i9 _/ x- @6 F4 d* f5 D/ p Headers:WideString, ! Y. U E" o8 i: M: R, V3 v: j 要 发 送 的URL 请 求 的 头 部 数 据。3 m4 Y& A; Z* n0 \ Refresh: 方 法, 刷 新 当 前 页 面。$ z7 g8 z. n* k6 P: q& n8 u4 }& g Stop: 方 法, 停 止 调 用 或 打 开 当 前 页 面。 6 U5 p& s* E% x* H0 ~ LocationName: 属 性(WideString), 当 前 位 置 的 名 称。; A4 G# H3 P9 A5 h5 J% }5 B& O LocationURL: 属 性(WideString), 当 前 位 置 的URL。* Y, i, q7 | E' q, w5 d Busy: 属 性(Boolean), 是 否 正 忙。 5 H4 t% g8 z2 Z Visible: 属 性(Boolean), 浏 览 器 窗 口 是 否 可 见。

% x8 H# n, k0 n, {

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

: e6 p2 r5 {/ H* l3 `) m2 L2 }0 n! Q

StatusBar: 属 性(Boolean), 是 否 显 示 状 态 栏。 6 u/ D8 q: @: W( ~& F' v StatusText: 属 性(WideString), 状 态 栏 内 容。 3 m: D8 @/ q0 l5 @2 F/ Z ToolBar: 属 性(SYSINT), 工 具 栏 中 的 内 容。 & K# ?0 j# E5 _2 R0 C" A) r MenuBar: 属 性(Boolean), 是 否 显 示 菜 单 条。7 f( V$ ]. r3 u) H2 d FullScreen: 属 性(Boolean), 是 否 全 屏 显 示。 * H) G& G+ F% k. U* i/ u9 w) E Offline: 属 性(Boolean), 是 否 脱 机 浏 览。 1 H& f) g6 i5 p- W- _' t, g AddressBar: 属 性(Boolean), 是 否 显 示 地 址 栏。

" |% r p) }+ _- q' g7 {" d

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

9 m% T. T- D5 C

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

- R- F5 g1 e7 g4 P. Y1 a# n

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

, b1 M3 V- O% [* ~2 @+ @8 ?5 B

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

2 R! f1 D( ]9 o: H% F

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

8 K# x. }8 ?9 P2 L

OnCommandStateChange = procedure(Sender: ' ?! d+ Y6 d) b7 {TObject; Command: Integer; Enable: WordBool) of object;

; K6 j$ z5 T4 L" n; r- r1 `; C& c

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

6 |* `) {* c8 {2 y

OnTitleChange = procedure(Sender: TObject;( ~7 e" u/ I C4 C. e- ~: p const Text: WideString) of object;

: g ?$ C& M: {, g, M$ w& x' t

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

* } y- @. \- c) R9 c% o5 }

OnPropertyChange = procedure(Sender: TObject; ' ^8 G5 f) E+ c5 I const Property_: WideString) of object;

' R3 `; `( w% ~* G' b5 [$ Y

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

6 G4 t9 d, C r9 k. M

OnDownloadComplete: TNotifyEvent9 o4 C. p, @0 T' a! q 在 下 载 页 面 完 成 后 发 生。 - n- @! B: i/ h4 I OnDownloadBegin: TNotifyEvent' B: N! m& D$ p% K; B! {# A     在 下 载 页 面 开 始 前 发 生。

( n5 x( D3 m- o8 e

三、 两 个 例 子 2 v% b" J$ _" O6 K ----1. 制 作 自 己 的 帮 助 系 统

+ C0 l0 `- t' C8 c: ~

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

- T! q0 P. N7 I) z# R3 D

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

' W4 r t5 m: z2 K J) s- w

procedure ShowHelp( HelpTopic,HelpItem : String );/ y! J& [! S- R9 }( u. v var 1 M ]% {; G9 g% c3 d8 ] TargetFrameName,PostData,Heads,Flags : OleVariant;7 d4 N) P+ F k5 H( M# G; t URL : widestring;1 ^; s) _. d u5 G begin 3 {% h% o! f. ^: i: a; n: E+ o TargetFrameName := '';1 R. ~) Y# [2 c# G! z { 指 定Frame 的 空 字 符 串 时, % p# x$ U& N) ^. l+ X 则 在 当 前Frame 中 打 开 帮 助 文 件}9 I& [# a3 l3 P4 c PostData := false;{ 不 发 送 数 据} ) \& \' { c. R: J. S$ h Heads := '';{Header 信 息 为 空} v% r! _1 M4 w8 S& u Flags := 0;{Flags 设 为0}" ?7 m+ f8 O1 { URL := HelpTopic + '.HTM #' +HelpItem; : I2 ^# Q) X9 l* @* Y, W4 g9 K { 帮 助 信 息 的URL} J0 u# @) l8 F. n with formHelp.webbrowser do2 w. ^: R, T7 `, V, Z H { 在 帮 助 窗 口 中 的IE 浏 览 器( o8 }# Y& b6 T4 C. o5 j3 Z 控 件 中 显 示 帮 助 信 息}, |1 m0 R6 z6 u9 M, a/ } begin / l) y4 K! L! U8 H* G navigate(URL,Flags,TargetFrameName, ' q6 P8 z a- s% @( nPostData,Heads);{ 显 示 帮 助 信 息}/ m2 e( a8 o9 x4 c/ Q end; ( c( k0 }- n, H- N: M, z: U. }! Yend;

/ f- D" ]; k* @3 m0 n2 i8 F

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

2 {( }4 I `8 b( q

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

: [3 E! d3 {# d

procedure ShowGIF( GIFFileName : String );* S6 o+ E/ K9 b' K5 ^ var6 i1 z' x1 S( z, S( y: g q8 N# a TargetFrameName,PostData,Heads,Flags : OleVariant; " a: M! j: e, {4 i3 [+ E URL : widestring; q' s7 X0 Q* d! W+ ]: C! Y) @begin+ j5 w7 t2 {: ~. u3 }1 A TargetFrameName := ''; $ T. ]3 e" I) E; y0 Y1 c { 指 定Frame 的 空 字 符 串 时, 7 a; N4 b6 B- o3 X 则 在 当 前Frame 中 打 开 动 画 文 件}" X$ O5 G v, e1 P- J6 Z PostData := false;{ 不 发 送 数 据} . a# J1 I1 j! {7 B5 l Heads := '';{Header 信 息 为 空}+ g ~3 n N t Flags := 0;{Flags 设 为0}5 a5 V7 f6 v2 @; X1 L URL := GIFFileName;/ ]4 N% I7 ~% C: H/ @ with formGIF.webbrowser do9 W% R. y0 a% d) B# u { 在 指 定 窗 口 中 的IE 浏 览 器 控 件 中 显 示 动 画}& d& W2 m3 d- |7 | begin & M# I) B7 V5 x, H- x I3 x+ M navigate(URL,Flags,TargetFrameName,Post ?& Y$ y' ]' u8 t' w5 [, E- v L! r Data,Heads);{ 显 示 动 画 文 件} 5 b" F( w9 N2 G. u+ Y; R end;' k' c! e8 o, A3 d( o- _& h' o end;

! v J3 J/ N$ X1 E1 W

---- 以 上 程 序 在PWIN98 +Delphi3.0 下 调 试 通 过。 & A/ r3 F8 _# B






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