6

在 Delphi XE2 程序中,如何跳转到 CHM 帮助文件主题内的锚点?锚点具有以下格式(从显示 CHM 文件的 HTML HelpViewer 中的主题页面源中提取):

<a name="my_anchor_id"></a>

我尝试了以下方法:

Application.HelpJump('MyTopicName.htm#my_anchor_id');

不幸的是,这不起作用:它确实跳转到了这个主题,但只跳转到了主题的顶部,而不是跳转到页面的锚点。

4

1 回答 1

3

跳转到 CHM 中的锚点
使用 Delphi2010 测试 - DelphiXE2 - Windows XP

如何使用 Delphi 跳转到 chm 文件(已编译的 HTML 帮助)中的锚点

是的,可以使用 HtmlHelp() 命令跳转到锚点。
<a name="my_anchor"></a>

 HtmlHelp(0,hpPath+'::/Overview.htm#UsingtheMenus>main',HH_DISPLAY_TOPIC,DWORD(nil));

中的链接: Overview.htm

  • 注意:这个链接不需要通过delphi程序跳转到
    锚点。(仅用于测试)。

概述.htm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
[...]
<BODY bgColor=#f7f8e2>
<H1>Overview</H1>
<A HREF="Overview.htm#UsingtheMenus">Using the Menus</A>
[...]

中的锚: Overview.htm

[...]
<A NAME="UsingtheMenus" </A>
<P><STRONG>Using the Menus and Toolbars</STRONG>
[...]

如果有人想试试。

以下是更多信息和测试程序:

在此处输入图像描述

运行 Project1.exe 并选择without :

在此处输入图像描述

Unit1.pas/命令

procedure TForm1.Button2Click(Sender: TObject);
begin
    HtmlHelp(0,hpPath+'::/Overview.htm#UsingtheMenus>main',HH_DISPLAY_TOPIC,DWORD(nil));
end;
  • 点击按钮 Overview.htm#UsingtheMenus

结果:

帮助文件打开并overview.htm出现。它被跳到了锚点。

在此处输入图像描述


下载源 Project1.exe D2010 和 XE2。
下载源码 sample.chm HtmlHelp 项目。

下载


现在让我们测试其他 2 个按钮

procedure TForm1.HelpKeywordClick(Sender: TObject);
begin
  Application.HelpKeyword('UsingtheMenus');
end;

procedure TForm1.HelpContextClick(Sender: TObject);
begin
  Application.HelpContext(IDH_UsingtheMenus);
end;
  • 点击按钮HelpKeyword('UsingtheMenus')

结果:

帮助文件打开并FirstTopic.htm出现。文本UsingtheMenus被插入到搜索字段中。没有跳到锚点!


  • 点击按钮HelpContext(IDH_UsingtheMenus)')

除了搜索框为空外,结果相同。


最后 2 次点击在这里演示:
HelpFile2\sample.chm 文件 中没有可用的秘密 ID 或关键字


现在我们更改帮助文件,以便Overview.htm#UsingtheMenus其他两种方法外都能成功。

  • 关闭应用程序“Project.exe”
  • 再次运行“Project.exe”。
  • 确保with已选中。

现在我们使用文件夹 HelpFile\
中的“sample.chm”,并进行以下设置。

样本.h

#define IDH_Creating_Projects_and_Topics 1005
#define IDH_Overview 1003
#define IDH_UsingtheMenus 1009

示例.ali

IDH_Overview=Overview.htm
IDH_welcom=FirstTopic.htm
IDH_UsingtheMenus=Overview.htm#UsingtheMenus

样本.hcc

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<HTML>
[...]
        <LI> <OBJECT type="text/sitemap">
            <param name="Name" value="Using the Menus">
            <param name="Local" value="Overview.htm#UsingtheMenus">
        </OBJECT>   
[...]
</HTML>

样本.hhk

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<HTML>
[...]
    <LI> <OBJECT type="text/sitemap">
        <param name="Name" value="Using the Menus">
        <param name="Name" value="Using the Menus">
        <param name="Local" value="Overview.htm#UsingtheMenus">
        </OBJECT>   
[...]
</HTML>

如果我们编译“sample.chm”,我们会收到一条错误消息。

HHC3015: Warning: An alias has been created to "Overview.htm#UsingtheMenus" but the file does not exist.

这是正常的,因为文件“Overview.htm#UsingtheMenus”并不真正存在!

让我们尝试一下

不要忘记,在尝试以下各项后,“帮助窗口”会再次关闭。否则你无法追踪不同的状态。

  • 点击按钮HelpKeyword('UsingtheMenus')

在此处输入图像描述

结果:
帮助文件打开并FirstTopic.htm出现。文本UsingtheMenus被插入到搜索字段中。文本UsingtheMenus在列表框中被选中
如果单击Show
它被跳转到锚点。


  • 点击按钮HelpContext(IDH_UsingtheMenus)')

结果:

帮助文件打开并overview.htm出现。它被跳到了锚点。


  • 点击按钮 Overview.htm#UsingtheMenus

结果:

结果与上述相同。
帮助文件打开并overview.htm出现。它被跳到了锚点。


现在我们可以使用三种方法之一来跳转到所需的标记。


如果有人对其他按钮的功能感兴趣,请继续阅读并获取更多信息。

明天继续。

于 2013-03-15T03:01:31.103 回答