数学建模社区-数学中国

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

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

- y! q% _" H) _9 `* E) Q: l- D; ? 深 圳 市 邮 政 储 汇 局(518040)& S- W; p9 C/ f; I6 a6 Z: U' O 王 发 军

# h$ o" f- p. g

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

/ O8 V7 }4 H# q/ d0 q- ]7 n

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

4 o8 V7 ~; T: T8 N4 E( M

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

' C2 |# l4 t [

二、 使 用IE 浏 览 器 控 件 5 i% W% U* s, M! a2 o2 O( O----以TWebBrowser(IE4 浏 览 器 控 件) 为 例 子。

* Z8 P- O- B" X0 V0 p

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

( R' n5 F/ i7 u! l

GoBack: 方 法, 后 退 到 上 一 个 页 面。 , Q o/ q6 Z r% T GoForward: 方 法, 前 进 到 下 一 个 页 面。 1 U% r, ]4 V3 z% ^! r GoHome: 方 法, 调 用 默 认 的 主 页 页 面, 7 t. k2 Q- g. w3 ]6 J. u' T/ m$ o7 ` 该 页 面 在IE 的 选 项 中 设 定。3 L! d8 ^# ~: Z GoSearch: 方 法, 调 用 默 认 的 搜 索 页 面, ' C; Z9 Y/ v, W, `3 E 该 页 面 在IE 的 选 项 中 设 定。

; e& L3 _( F1 ?8 J5 S* Y

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

! h9 w) ]; m9 s; d1 }/ x ]

URL: 指 定 页 面 的URL。 ; Y. n6 b |2 E" s1 O" T% ^& E$ [ Flags:Word 类 型, 作 用 还 不 清 楚,8 W3 W9 N& b( f t+ W1 x0 N; u 可 设 为0。

1 h, T: S- @' B% f

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

# Q9 B% t7 d& f' ^9 E% P' F3 c$ M

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

: O0 t. R' l' h

PostData:boolean, 是 否 允 许 发 送 数 据。/ z1 X% D D/ n y, m Headers:WideString, ) |6 J& f% F( ^! I+ U 要 发 送 的URL 请 求 的 头 部 数 据。( l8 |+ R$ M5 h6 J' Y0 i# {5 g Refresh: 方 法, 刷 新 当 前 页 面。 , @+ A- ]6 Y2 p; S Stop: 方 法, 停 止 调 用 或 打 开 当 前 页 面。 2 l" L: d L: a! W LocationName: 属 性(WideString), 当 前 位 置 的 名 称。 ; M5 \$ V6 M$ G7 ?/ {* x; B LocationURL: 属 性(WideString), 当 前 位 置 的URL。 5 u: B! ~! O/ u Busy: 属 性(Boolean), 是 否 正 忙。 5 i1 T; f! W3 i7 y8 B! e Visible: 属 性(Boolean), 浏 览 器 窗 口 是 否 可 见。

" [0 ?) y. F7 H7 _+ o& A/ j8 X

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

5 J/ }6 E8 K! {# U" Q' {

StatusBar: 属 性(Boolean), 是 否 显 示 状 态 栏。$ |) s9 w( B* t" q& C StatusText: 属 性(WideString), 状 态 栏 内 容。 4 p, u; C' e6 m5 _$ i8 d ToolBar: 属 性(SYSINT), 工 具 栏 中 的 内 容。 ! A- f- U2 M7 O1 }; o MenuBar: 属 性(Boolean), 是 否 显 示 菜 单 条。 ) t" u+ {5 d+ Q6 \0 n: B8 f FullScreen: 属 性(Boolean), 是 否 全 屏 显 示。 & o7 K; B# I1 z$ W l2 N b! F Offline: 属 性(Boolean), 是 否 脱 机 浏 览。 ( v, v0 g" R8 Y2 E5 Z, q% P2 Q) m AddressBar: 属 性(Boolean), 是 否 显 示 地 址 栏。

: \4 c/ @0 f2 M" w: ]8 {7 w/ X! y8 Z

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

1 y6 z' Q8 O3 W O2 B, k; z

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

" |1 F' n1 @# t1 {

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

* L3 o) L; \9 r! o1 {5 W- U

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

a0 h9 k# H, t3 s. x7 w) G2 Z8 P

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

& l1 u4 X4 ]: ]2 B( v1 S

OnCommandStateChange = procedure(Sender: . D( K: j1 R `0 [$ t; o* J( } TObject; Command: Integer; Enable: WordBool) of object;

5 x x3 B s9 y' ?: z p

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

5 F4 X% P- Z4 ^

OnTitleChange = procedure(Sender: TObject; ) @" \! C! s0 J+ X/ v const Text: WideString) of object;

1 u& r# b4 n0 c

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

4 E! T) }7 @) U w

OnPropertyChange = procedure(Sender: TObject;9 m5 \, A( c" R. e* u" I+ l) G const Property_: WideString) of object;

; b. o1 m' M! I+ Q1 x

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

2 ?. ?0 |8 A5 M& |

OnDownloadComplete: TNotifyEvent ) f% Q. ?* V8 Q+ v 在 下 载 页 面 完 成 后 发 生。7 k( {1 i4 F" s& f: v! Z: B OnDownloadBegin: TNotifyEvent % [, l7 ?- U9 C: y- C0 u$ L) A     在 下 载 页 面 开 始 前 发 生。

, R# e, ~& V9 ~0 `; ]. D

三、 两 个 例 子 # d5 U1 [7 t, Y/ x o( |5 w+ g+ v6 n----1. 制 作 自 己 的 帮 助 系 统

! J9 F6 x1 o: ~/ h% @' q/ T

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

: V1 c0 P3 n( [4 c4 {3 M

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

) I1 B1 t2 h0 y/ E, B! S% ]

procedure ShowHelp( HelpTopic,HelpItem : String ); 3 m0 q4 L; } U$ Y0 b+ Xvar" k& S- A$ Y: @- S) Q. W0 G$ _ TargetFrameName,PostData,Heads,Flags : OleVariant; + F" L. u/ ^* N7 [& x, G2 L URL : widestring;) o" ^3 V) `( }7 g4 B begin # j+ s m: T5 j% M8 r' D TargetFrameName := ''; 2 |; S: Z; u% l2 C$ B$ M8 t { 指 定Frame 的 空 字 符 串 时, ! @5 d$ O# y4 W8 ]8 j3 s 则 在 当 前Frame 中 打 开 帮 助 文 件}* @8 Z: i# r& s& W6 N PostData := false;{ 不 发 送 数 据}8 Z* y! ~# w- f, q, B Heads := '';{Header 信 息 为 空}( S' B5 d! g# K# |7 w! \ Flags := 0;{Flags 设 为0} 2 Y8 S n3 `8 m( @! F URL := HelpTopic + '.HTM #' +HelpItem;3 d% d+ o' i: \' V9 U) o { 帮 助 信 息 的URL} 1 R3 F" N+ i4 O+ n with formHelp.webbrowser do4 z- g) v6 x4 m3 s! C { 在 帮 助 窗 口 中 的IE 浏 览 器! J% A0 M( X) j 控 件 中 显 示 帮 助 信 息} * s+ z& T/ k. J+ H! I begin, z1 z, M5 w& I; O1 i0 n navigate(URL,Flags,TargetFrameName,8 K# R9 X! |) J PostData,Heads);{ 显 示 帮 助 信 息} ! n+ P* Q+ W: p$ t$ }; v5 [ end;/ R7 z: I$ S$ n+ p* ]) c- m6 G end;

4 @# m4 H. Z2 I; d: k& A R1 q

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

) j& ]" C% R3 Y

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

; J. i! @9 }) _

procedure ShowGIF( GIFFileName : String ); - y$ p+ z. |( w/ b. u! n, ?6 Lvar; ^* |$ m9 W- K, k TargetFrameName,PostData,Heads,Flags : OleVariant; 5 N" o3 u6 K6 E0 T$ }2 D* y8 v URL : widestring; 2 L% J4 Q( c* ^! V \7 _begin* }. {& ^" U( a TargetFrameName := '';- K) N8 `: i# m$ X/ \. B { 指 定Frame 的 空 字 符 串 时, 7 p( R! m7 b3 n/ { 则 在 当 前Frame 中 打 开 动 画 文 件}% j) n$ n( S5 Y4 A7 Q$ _' L PostData := false;{ 不 发 送 数 据} % m; g8 ?2 L9 [+ }. _; O Heads := '';{Header 信 息 为 空} ; f' N% k0 R7 h Flags := 0;{Flags 设 为0}$ ?; @4 }! [% w. N5 [ URL := GIFFileName; / U" L& [2 y% O7 m2 ] with formGIF.webbrowser do$ ]* i! D1 D' \* n4 } { 在 指 定 窗 口 中 的IE 浏 览 器 控 件 中 显 示 动 画}' G( k! s1 o; V% M begin K( X: H, l3 G navigate(URL,Flags,TargetFrameName,Post ?: y" n- L4 S5 z% w' r+ [3 f: o Data,Heads);{ 显 示 动 画 文 件} ! A( i7 z" L; R; y end;# E4 t) p6 h X- L0 y end;

' F: L5 _7 o( @

---- 以 上 程 序 在PWIN98 +Delphi3.0 下 调 试 通 过。 # \2 f( N) K' f- l






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