数学建模社区-数学中国

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

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

: r& ^# A$ H# _, W 深 圳 市 邮 政 储 汇 局(518040) # V8 ^9 D# Z4 \$ T0 A王 发 军

5 n" C. C/ m0 A( [

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

6 @6 B3 N6 }% z' Z8 J" F0 Y9 S1 u7 z

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

! y/ N e7 Y7 w# x

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

+ ?0 B- l/ ]# N6 _( d" w

二、 使 用IE 浏 览 器 控 件 5 K% Y& z& ?2 _2 T----以TWebBrowser(IE4 浏 览 器 控 件) 为 例 子。

: s5 }9 ]: ^: Y

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

+ I+ j0 l# ^' l: j5 x) M0 T# |

GoBack: 方 法, 后 退 到 上 一 个 页 面。, C$ T2 k1 d( g GoForward: 方 法, 前 进 到 下 一 个 页 面。 / q+ u# Z# f$ t# ^: s GoHome: 方 法, 调 用 默 认 的 主 页 页 面,; i; S4 q% v8 n$ j9 |2 ^, k k 该 页 面 在IE 的 选 项 中 设 定。 0 |. q% i' j/ r! Z8 e GoSearch: 方 法, 调 用 默 认 的 搜 索 页 面, * @) t: Y* h" b9 t 该 页 面 在IE 的 选 项 中 设 定。

M2 L# K2 A/ m7 y) I- l3 w

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

+ y% c( J) l6 w* D: m+ R5 t; ]0 E

URL: 指 定 页 面 的URL。 / d: E, Y, ~0 I3 r Flags:Word 类 型, 作 用 还 不 清 楚,& S) u m1 s& m. c 可 设 为0。

$ R3 Q* {6 R/ ] ]; n. r

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

* J6 }& N; j, Q' h3 x, s, R) E

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

9 W$ e/ s9 P/ ?

PostData:boolean, 是 否 允 许 发 送 数 据。, B3 Y* L( i6 l Headers:WideString,8 X( ~' t( V. G7 j 要 发 送 的URL 请 求 的 头 部 数 据。- E4 d8 n# w! t4 K4 `1 w Refresh: 方 法, 刷 新 当 前 页 面。 ) {' a, ^& Q3 J Stop: 方 法, 停 止 调 用 或 打 开 当 前 页 面。 E* P2 S1 N6 Z4 q2 s) J LocationName: 属 性(WideString), 当 前 位 置 的 名 称。 L8 |3 b1 o; \& m$ Q4 Q& J( c- b LocationURL: 属 性(WideString), 当 前 位 置 的URL。 % \ o6 H& G9 U Busy: 属 性(Boolean), 是 否 正 忙。) p- C j- Q9 R8 ~, ~: ? Visible: 属 性(Boolean), 浏 览 器 窗 口 是 否 可 见。

5 [" B7 X! [2 l( d! N/ ^

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

, F% k4 x& W+ K

StatusBar: 属 性(Boolean), 是 否 显 示 状 态 栏。 0 d; p* h+ R, k# H9 B' H, M StatusText: 属 性(WideString), 状 态 栏 内 容。' K, n5 p+ _' { \ ToolBar: 属 性(SYSINT), 工 具 栏 中 的 内 容。 " J0 H4 @1 c* L! B5 |8 u MenuBar: 属 性(Boolean), 是 否 显 示 菜 单 条。 p* {3 Q6 w6 {) Y* g* r FullScreen: 属 性(Boolean), 是 否 全 屏 显 示。 " A% p: `$ t) O R- V Offline: 属 性(Boolean), 是 否 脱 机 浏 览。: M1 j3 q; e* J, q- R AddressBar: 属 性(Boolean), 是 否 显 示 地 址 栏。

) V& b5 u g/ L0 q/ i5 h7 P% O. Z

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

; C L/ v' \& e, e3 n

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

- Z9 b3 n$ e) a5 d& Q; H% K

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

9 W3 N& }& u" |2 \* W* w2 N

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

7 v8 ]8 X) E& p3 q1 z

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

9 U- ~2 D# s& J. E* R0 C

OnCommandStateChange = procedure(Sender: - ^) o9 w' c$ m* T1 A+ LTObject; Command: Integer; Enable: WordBool) of object;

: [! M$ C7 k) y$ O5 t2 i

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

: k( E" i1 T# ]5 q, D# d& k

OnTitleChange = procedure(Sender: TObject; / {6 G) ~8 d) H const Text: WideString) of object;

% P2 H- ?9 \9 i" S7 }! z) Z

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

3 A. R j( f7 ~4 [) S: z- O$ i

OnPropertyChange = procedure(Sender: TObject; , y( r% I. ^9 v% l8 O6 q const Property_: WideString) of object;

- h% `' r1 P |: V. U+ k

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

5 k Z' Q" q; R# j0 v

OnDownloadComplete: TNotifyEvent4 Q2 f' z$ I, J2 { 在 下 载 页 面 完 成 后 发 生。 & f; I+ x# b! |2 f/ g. @$ o OnDownloadBegin: TNotifyEvent + ~; Y) q( w6 `9 T9 n) O* Q! B0 S     在 下 载 页 面 开 始 前 发 生。

; d2 N0 A3 B1 T, W

三、 两 个 例 子 3 J% g/ V5 f7 y8 e ----1. 制 作 自 己 的 帮 助 系 统

+ O, C( G0 e) @1 A ]

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

; g4 V' r! S4 E+ Y

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

3 z/ [/ ^4 d. t ?, z

procedure ShowHelp( HelpTopic,HelpItem : String );/ L% n1 ? e+ {' h% _) q8 x var% R) a2 A4 b0 u4 r TargetFrameName,PostData,Heads,Flags : OleVariant;; Q- g1 J5 H3 Z/ a0 C5 u URL : widestring; / y; H" I/ v7 |. R4 p( lbegin 7 o$ ^; M' d& u* ?5 [( e8 Q0 k TargetFrameName := '';1 ~% s- p" g) K0 J; q x7 q1 T { 指 定Frame 的 空 字 符 串 时, # i( t N& |# @ 则 在 当 前Frame 中 打 开 帮 助 文 件}4 S; d5 x; Z1 _( O PostData := false;{ 不 发 送 数 据}$ [% e7 B" p/ q; m Heads := '';{Header 信 息 为 空}. \! V& v1 r# C n) ]% { Flags := 0;{Flags 设 为0} : A) u& ^4 {/ ~) T URL := HelpTopic + '.HTM #' +HelpItem;+ l2 T# K5 u1 `7 y% d: u) A { 帮 助 信 息 的URL} 1 i P3 Y" C, h5 E; h with formHelp.webbrowser do ' W! m" R/ }& Q4 `6 E+ M { 在 帮 助 窗 口 中 的IE 浏 览 器* l8 M% l1 s6 `: ^8 Z 控 件 中 显 示 帮 助 信 息}# i1 K) T7 U1 t- e# x `& y. \ begin " k0 l5 a# C, ~ navigate(URL,Flags,TargetFrameName,7 B% f2 O' C+ H8 D$ ] PostData,Heads);{ 显 示 帮 助 信 息} 4 c. f- D: f. f! k' C+ c! u8 l end; : d$ u& X+ ^' O* send;

& h7 D) T; b# p( w3 U

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

3 W; V( K- }. ^, @

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

5 _8 z6 i; n3 Z4 X' W5 a$ j

procedure ShowGIF( GIFFileName : String ); * v: O5 r+ R5 T5 L S' vvar5 w& U4 m. S% u; o; C( U5 ] TargetFrameName,PostData,Heads,Flags : OleVariant;; W% ^0 m' c7 Y: U s( O' y# n URL : widestring;, E# y2 c4 W! N begin- q- m8 D3 Q9 w TargetFrameName := ''; ! \" l$ b% E% n& A { 指 定Frame 的 空 字 符 串 时, ! P6 ]. ~2 V3 z+ u5 ^ 则 在 当 前Frame 中 打 开 动 画 文 件}+ G8 k. R& o) E t' X) ^( z PostData := false;{ 不 发 送 数 据} " t4 [' U4 Q5 H& j Heads := '';{Header 信 息 为 空}+ q2 _& w( Y f1 Q9 V Flags := 0;{Flags 设 为0}2 S# e# R+ a' D; x3 ]& ~ URL := GIFFileName;. Q" G: i) w9 G0 e+ s4 ?- H4 _% i with formGIF.webbrowser do( n2 I8 `+ j E8 ] { 在 指 定 窗 口 中 的IE 浏 览 器 控 件 中 显 示 动 画} " k6 u" ^. w9 b* Z; Q begin % @: I4 g* w3 I5 F( c navigate(URL,Flags,TargetFrameName,Post ? : f2 D j5 q7 @2 a- w0 F+ `" T' mData,Heads);{ 显 示 动 画 文 件}" ?6 F F/ W4 P' Q* {2 M$ ~. t7 f$ C end;4 [ f! E( F$ [ O Q& X6 I* N( [ end;

% }5 B$ l0 g9 `, r4 z# G$ V' {

---- 以 上 程 序 在PWIN98 +Delphi3.0 下 调 试 通 过。 ! a6 o- Q9 Q1 E+ w) w, q






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