德尔福XE2:跳转到CHM锚?(Delphi XE2: Jumping to an anchor i

2019-06-27 20:45发布

德尔福XE2程序,我怎么跳转到一个CHM帮助文件主题内的锚? 所述锚具有以下格式(从HTML HelpViewer示出CHM文件的话题网页的源中提取):

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

我试过如下:

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

不幸的是,这并不工作:它跳转到这个话题,但仅限于该主题的顶部,而不是到锚,这是几向下滚动页面。

Answer 1:

跳到CHM锚
测试了Delphi2010 - DelphiXE2 - Windows XP中

如何跳转到在CHM文件(编译的HTML帮助)用Delphi。

是的,有可能用一个HTMLHELP()命令跳到的锚固件。
<a name="my_anchor"></a>

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

在链接:Overview.htm

  • 注意: 不需要此链接通过德尔福程序跳转到
    锚(仅用于测试)。

Overview.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>
[...]

如果有人想尝试一下。

这里有更多的信息和testprogram:

运行Project1.exe并没有选择

所述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插入searchfield。 无跳转到锚!


  • 点击按钮HelpContext(IDH_UsingtheMenus)')

除了搜索框相同的结果是空的。


最后2次点击这里展示:
有在文件HelpFile2 \ sample.chm 什么秘密ID或关键字可用。


现在我们改变了帮助文件,以便除了Overview.htm#UsingtheMenus其他两种方法导致成功。

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

现在我们用“sample.chm”文件夹中HELPFILE \
以下设置。

sample.h

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

sample.ali

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

sample.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>

sample.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插入searchfield。 文本UsingtheMenus在列表框中选择
如果你点击Show
跃升为锚。


  • 点击按钮HelpContext(IDH_UsingtheMenus)')

结果:

帮助文件被打开, overview.htm出现。 它跃升为锚。


  • 点击该按钮Overview.htm#UsingtheMenus

结果:

相同的结果如上述。
帮助文件被打开, overview.htm出现。 它跃升为锚。


现在我们可以用以下三种方法之一跳转到所需的符号。


如果有人有兴趣的其他按钮的功能,然后阅读,并获得更多的信息。

明天将继续进行。



文章来源: Delphi XE2: Jumping to an anchor in CHM?