
本站地址:http://www.bajiao123.com

让别人通过菜单项访问你的个人主页
很 多 软 件,
如Delphi 4.0 的 菜 单 项Help 就 有 这 种 功 能( 如 下 图 所 示), 可 以
让 用 户 很 直 接、 方 便 地 访 问 该 公 司 的 主 页。 你 知 道 这
一 功 能 是 如 何 实 现 的 吗 ?
首 先 说 说 实 现 这 一 功 能 的 原 理: 你 知 道 在Windows 95 的
资 源 管 理 器 里, 只 要 用 鼠 标 双 击 某 个 文 件, 它 就 会 调
用 与 它 相 关 联 的 应 用 程 序 对 它 进 行 打 开、 显 示、 编 辑
或 打 印 等 操 作。 对 于Windows 95 来 说, 只 需 要 知 道 文 件 的
扩 展 名 是 注 册 在 哪 一 个 应 用 程 序 里 就 可 以 了。 在Delphi
中, 要 打 开 和 打 印 某 个 特 定 的 文 件, 必 须 使 用ShellExcute
函 数( 一 个 Windows API 函 数), 其 定 义 在ShellAPI..PAS 里 可 以 找
到。ShellExcute 的 原 型 为:

Function ShellExecute(
hWnd: HWND; // 文 件 句 柄
Operation, // 指 向 一 个 字 符 串, 该 字 符 串 的 内 容 为 可 执
行 的 特 定 操 作。 可 用 的 字 符 串 为"Open" 和"Print",
用 来 打 开 和 打 印 特 定 的 文 件。
FileName, // 指 向 文 件 名 的 字 符 串。
Parameters, // 指 向 一 个 字 符 串,
内 容 为 可 执 行 文 件 所 带 的 参 数。
Directory: // 指 向 一 个 字 符 串,
内 容 为 可 执 行 文 件 的 缺 省 目 录。
Pchar ShowCmd:Integer // 应 用 程 序 以 何 种
显 示 方 式 打 开。 如SW_SHOWNORMAL
( 一 般 方 式)、SW_SHOWMINIZE( 最 小 化)、
SW_SHOWMAXIMIZE( 最 大 化)。
): HINST:stdcall;
举 个 例 子:
ShellExecute (handle, 'open', 'http://www.mypage.co
m',nil,nil, SW_SHOWNORMAL);
这 个 函 数 会 启 动WINDOWS 里 缺 省 的 浏 览 器 去 进 入"www.mypage.com"
这 个WWW 页 面。 另 外 还 可 以 访 问 这 个 站 点 下 某 个 指 定 的
文 件。 如: "http://www.mypage.com/games/diablo.html" 。 上 面 只 是
简 单 地 以 缺 省 方 式 打 开WWW 页 面, 没 有 使 用 错 误 处 理 来
判 断 可 能 出 现 的 异 常 情 况, 只 要 页 面 的 地 址 确 实 存 在
就 可 以。
下 面 用 一 过 程 来 处 理 调 用 页 面 时 可 能 出 现 的 种 种
错 误:
procedure ExploerWeb(handle:HWND ; page:PChar);
Var
Returnvalue : integer;
begin
ReturnValue := ShellExecute(handle, 'open', page, nil, nil,
SW_SHOWNORMAL);
if ReturnValue <= 32 then
case Returnvalue of
0 : MessageBox(handle,'Error: Out of Memory','Error
ExploreWeb',0);// 内 存 不 足
ERROR_FILE_NOT_FOUND: MessageBox(handle,'Error:
File not Found','Error ExploreWeb',0); // 没 有 找 到 该 文 件
ERROR_PATH_NOT_FOUND: MessageBox(handle,'Error:
Directory not','Error ExploreWeb',0); // 路 径 不 对
ERROR_BAD_FORMAT:MessageBox(handle,'Fehler: Wrong
format in EXE','Error ExploreWeb',0); // 文 件 格 式 不 对
// 还 有 其 他 错 误 处 理, 请 参 考 帮 助
ShellExcute 的ReturnValues 说 明。
Else MessageBox (handle,PChar('Error nr:' +
IntToStr(Returnvalue) +'in ShellExecute'),
'Error ExploreWeb',0) // 其 他 错 误
end //case
end;
用 菜 单 项 实 现 的OnClick 事 件 如 下:
Procedure Form1.MyPageHelpMenuClick(Sender: TObject);
begin
ExploreWeb(handle,'http://www.myweb.de/help.htm');
end;
就 这 么 简 单, 有 位 高 手 曾 经 说 过,Delphi 的 精 华 在 于
掌 握Windows 的API, 有 了 它, 没 有 什 么 不 可 以 实 现 的。 真 是
一 语 道 破 天 机。
本站地址:http://www.bajiao123.com

