韩冰 发表于 2005-1-26 12:57

在 程 序 中 嵌 入 浏 览 器

<P>
深 圳 市 邮 政 储 汇 局(518040)
王 发 军 </P>
<P>--------------------------------------------------------------------------------</P>
<P>一、 在Delphi 中 引 入IE 浏 览 器 控 件
---- 由 于IE 浏 览 器 控 件 需 要 提 供 显 示 功 能 才 能 使 用, 所 以 不 能 在 程 序 中 用CreateOleObject 取 得 一 个 实 例 后 直 接 使 用 其 属 性 和 方 法, 否 则 程 序 在 运 行 时 会 引 起 错 误; 这 时 需 要 用Delphi 中 提 供 的"Import ActiveX Control" 功 能, 操 作 方 法 如 下 所 述。 </P>
<P>----在"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, 其 中 有 这 三 个 控 件 的 包 装 细 节, 当 然 含 控 件 的 属 性 和 方 法 说 明 了, 它 可 以 作 为 我 们 使 用 控 件 的 参 考 资 料。 </P>
<P>二、 使 用IE 浏 览 器 控 件
----以TWebBrowser(IE4 浏 览 器 控 件) 为 例 子。 </P>
<P>----TWebBrowser 的 常 见 属 性 和 方 法 主 要 有: </P>
<P>      GoBack: 方 法, 后 退 到 上 一 个 页 面。
      GoForward: 方 法, 前 进 到 下 一 个 页 面。
      GoHome: 方 法, 调 用 默 认 的 主 页 页 面,
                  该 页 面 在IE 的 选 项 中 设 定。
      GoSearch: 方 法, 调 用 默 认 的 搜 索 页 面,
                  该 页 面 在IE 的 选 项 中 设 定。</P>
<P>---- Navigate(const URL: WideString; var Flags, TargetFrameName, PostData, Headers: OleVariant):方 法, 调 用 指 定 页 面, 具 体 参 数 如 下: </P>
<P>      URL: 指 定 页 面 的URL。
      Flags:Word 类 型, 作 用 还 不 清 楚,
            可 设 为0。</P>
<P>---- TargetFrameName:WideString, 打 开 页 面 所 在 的Frame, 为 空 字 符 串 时 在 当 前 的Frame 中 打 开;TargetFrameName 指 定 的 Frame 存 在 时 在Frame 中 打 开; </P>
<P>----TargetFrameName 指 定 的Frame 不 存 在 时 则 新 建 一 个 窗 口 打 开, 此 时 就 相 当 于 调 用 外 部 的IE 浏 览 器 了。 </P>
<P>      PostData:boolean, 是 否 允 许 发 送 数 据。
      Headers:WideString,
           要 发 送 的URL 请 求 的 头 部 数 据。
      Refresh: 方 法, 刷 新 当 前 页 面。
      Stop: 方 法, 停 止 调 用 或 打 开 当 前 页 面。
      LocationName: 属 性(WideString), 当 前 位 置 的 名 称。
      LocationURL: 属 性(WideString), 当 前 位 置 的URL。
      Busy: 属 性(Boolean), 是 否 正 忙。
      Visible: 属 性(Boolean), 浏 览 器 窗 口 是 否 可 见。</P>
<P>---- ( 以 下 属 性 为 在TWebBrowser 新 增, TWebBrowser_V1 中 没 有, 其 作 用 有 待 探 索) </P>
<P>      StatusBar: 属 性(Boolean), 是 否 显 示 状 态 栏。
      StatusText: 属 性(WideString), 状 态 栏 内 容。
      ToolBar: 属 性(SYSINT), 工 具 栏 中 的 内 容。
      MenuBar: 属 性(Boolean), 是 否 显 示 菜 单 条。
      FullScreen: 属 性(Boolean), 是 否 全 屏 显 示。
      Offline: 属 性(Boolean), 是 否 脱 机 浏 览。
      AddressBar: 属 性(Boolean), 是 否 显 示 地 址 栏。</P>
<P>----TWebBrowser 的 常 见 事 件 主 要 有: </P>
<P>----OnStatusTextChange = procedure(Sender: TObject; const Text: WideString) of object; </P>
<P>----在 状 态 栏 提 示 信 息 变 化 时 发 生, 参 数 Text 为 当 前 状 态 栏 提 示 信 息, 我 们 可 以 根 据 该 信 息 来 更 新 我 们 自 己 的 状 态 栏 提 示 信 息 或 处 理 其 它 的 事 务。 </P>
<P>----OnProgressChange = procedure(Sender: TObject; Progress, ProgressMax: Integer) of object; </P>
<P>----在 打 开 页 面 的 进 度 变 化 时 发 生, 参 数 Progress 为 当 前 进 度,ProgressMax 为 总 进 度, 我 们 可 以 根 据 这 两 个 参 数 来 更 新 我 们 自 己 的 状 态 栏 提 示 信 息 或 处 理 其 它 的 事 务。 </P>
<P>    OnCommandStateChange = procedure(Sender:
TObject; Command: Integer; Enable: WordBool) of object;</P>
<P>----当 执 行 新 的 命 令 时 发 生,Command 为 命 令 标 识,Enable 为 是 否 允 许 执 行 该 命 令。 </P>
<P>   OnTitleChange = procedure(Sender: TObject;
const Text: WideString) of object;</P>
<P>----在 页 面 的 标 题 发 生 变 化 时 发 生,Text 为 当 前 标 题。 </P>
<P>    OnPropertyChange = procedure(Sender: TObject;
const Property_: WideString) of object;</P>
<P>----在 页 面 的 属 性 发 生 变 化 时 发 生,Property_ 为 属 性 名 称 </P>
<P>    OnDownloadComplete: TNotifyEvent
    在 下 载 页 面 完 成 后 发 生。
    OnDownloadBegin: TNotifyEvent
    在 下 载 页 面 开 始 前 发 生。</P>
<P>三、 两 个 例 子
----1. 制 作 自 己 的 帮 助 系 统 </P>
<P>----我 们 利 用IE 浏 览 器 控 件 为 用 户 制 作 了 一 个 帮 助 系 统, 帮 助 文 件 由 多 个HTML 文 件 组 成, 一 个 主 题 对 应 一 个 HTML 文 件(Topic.HTM), 每 个 主 题 下 的 项 目 对 应HTML 文 件 中 的 一 个 标 签( #Item)。 这 样 在 我 们 的 系 统 中, 就 不 必 再 调 用IE 浏 览 器 或 WinHelp 程 序 来 为 用 户 提 供 帮 助 了。 相 信 大 家 知 道HTML 帮 助 文 件 与 传 统 的HLP 帮 助 文 件 相 比 的 优 势 所 在 吧。 </P>
<P>----在 下 面 例 子 中, 演 示 了TWebBrowser(IE4 浏 览 器 控 件) 的Navigate 方 法 的 使 用 方 法。 请 注 意 程 序 中 的 注 释。 下 面 为 程 序 的 主 要 片 段。{ 根 据 主 题 和 项 目 调 用 帮 助 文 件} </P>
<P>procedure ShowHelp( HelpTopic,HelpItem : String );
var
   TargetFrameName,PostData,Heads,Flags : OleVariant;
   URL : widestring;
begin
     TargetFrameName := '';
     { 指 定Frame 的 空 字 符 串 时,
     则 在 当 前Frame 中 打 开 帮 助 文 件}
     PostData := false;{ 不 发 送 数 据}
     Heads := '';{Header 信 息 为 空}
     Flags := 0;{Flags 设 为0}
     URL := HelpTopic + '.HTM #' +HelpItem;
     { 帮 助 信 息 的URL}
     with formHelp.webbrowser do
      { 在 帮 助 窗 口 中 的IE 浏 览 器
        控 件 中 显 示 帮 助 信 息}
          begin
          navigate(URL,Flags,TargetFrameName,
PostData,Heads);{ 显 示 帮 助 信 息}
          end;
end;</P>
<P>----2. 显 示 一 个GIF 动 画 </P>
<P>----假 如 你 还 没 有 一 个 适 合 的 动 画 显 示 控 件, 不 妨 试 用 一 下 下 面 的 方 法。 </P>
<P>procedure ShowGIF( GIFFileName : String );
var
   TargetFrameName,PostData,Heads,Flags : OleVariant;
   URL : widestring;
begin
   TargetFrameName := '';
  { 指 定Frame 的 空 字 符 串 时,
  则 在 当 前Frame 中 打 开 动 画 文 件}
   PostData := false;{ 不 发 送 数 据}
   Heads := '';{Header 信 息 为 空}
   Flags := 0;{Flags 设 为0}
   URL := GIFFileName;
   with formGIF.webbrowser do
{ 在 指 定 窗 口 中 的IE 浏 览 器 控 件 中 显 示 动 画}
          begin
          navigate(URL,Flags,TargetFrameName,Post ?
Data,Heads);{ 显 示 动 画 文 件}
          end;
end;</P>
<P>---- 以 上 程 序 在PWIN98 +Delphi3.0 下 调 试 通 过。
</P>
页: [1]
查看完整版本: 在 程 序 中 嵌 入 浏 览 器