Delphi XE2:在 CHM 中跳到锚点?

2023-11-24

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

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

我尝试了以下方法:

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

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


在 CHM 中跳到锚点
使用 Delphi 2010 - Delphi XE2 - Windows XP 进行测试

如何跳转到anchor在 Delphi 的 chm 文件(编译的 HTML 帮助)中。

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

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

链接在:概述.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>
[...]

锚点:概述.htm

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

如果有人想尝试一下。

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

enter image description here

运行Project1.exe并选择没有 :

enter image description here

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出现。它是跳到锚上。

enter image description here


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

Download


现在让我们测试其他 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 次点击演示如下:
没有秘密 ID 或关键字在文件 HelpFile2\sample.chm 中可用。


现在我们更改帮助文件那除了Overview.htm#UsingtheMenus其他两种方法都会成功。

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

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

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

enter image description here

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


  • 单击按钮HelpContext(IDH_UsingtheMenus)')

结果:

帮助文件打开并且overview.htm出现。它是跳到锚上。


  • 单击按钮Overview.htm#UsingtheMenus

结果:

与上面的结果相同。
帮助文件打开并且overview.htm出现。它是跳到锚上。


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


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

明天继续。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Delphi XE2:在 CHM 中跳到锚点? 的相关文章

随机推荐

  • enctype='multipart/form-data' 是什么意思?

    什么是enctype multipart form data HTML 表单中的意思是什么 我们什么时候应该使用它 当您发出 POST 请求时 您必须以某种方式对构成请求正文的数据进行编码 HTML 表单提供三种编码方式 applicati
  • 将字符串时间转换为 UNIX 时间戳

    我有一个像这样的字符串2013 05 29T21 19 48Z 我想将其转换为自 1970 年 1 月 1 日 UNIX 纪元 以来的秒数 这样我就可以仅使用 4 个字节 或者可能是 5 个字节 以避免 2038 年问题 来保存它 我怎样才
  • ASP.NET MVC 4 拦截所有传入请求

    有没有办法让我抓住all向我的 ASP NET MVC 4 应用程序传入请求并在继续将请求发送到指定的控制器 操作之前运行一些代码 我需要使用现有服务运行一些自定义身份验证代码 为了正确执行此操作 我需要能够拦截来自所有客户端的所有传入请求
  • Xamarin 形成树视图

    I m trying to implement a treeview with nested data in Xamarin forms Something that looks like this 点击每个项目将打开可能的子项目列表 我在
  • 将 hexdigest() 的结果与字符串进行比较

    我有一个生成的 MD5 哈希值 我想将其与字符串中的另一个 MD5 哈希值进行比较 下面的陈述是错误的 尽管它们在打印时看起来是一样的并且应该是正确的 hashlib md5 foo hexdigest acbd18db4cc2f85ced
  • mongoose Model.findOne TypeError:对象没有方法“findOne”

    我有一个简单的 node js 代码 它使用 mongoose 它在保存时有效 但不检索 save 有效 但是 findOne 没有 mongoose require mongoose mongoose connect mongodb lo
  • CONSTRAINT 检查远程相关表中的值(通过连接等)

    我想添加一个约束来检查相关表中的值 我有3张桌子 CREATE TABLE somethink usr rel user id BIGINT NOT NULL stomethink id BIGINT NOT NULL CREATE TAB
  • IOS模拟器:模拟器用户要求新的图形质量:100

    当我在 iOS 9 0 模拟器中运行 iOS 应用程序时 我收到以下警告消息 警告消息 模拟器用户已请求新的图形质量 100 以前有人见过这个错误吗 你能解决它吗 你做了什么来修复它 如果您愿意 可以忽略此错误 这与你的代码无关 这只是苹果
  • 枚举类型布局与其基础类型兼容吗?

    我正在翻看n3690 即将出台的草案C 14标准 我在部分中看到7 2段落9 如果两个枚举类型具有相同的基础类型 则它们是布局兼容的 但是 我找不到任何说明枚举类型与其基础类型布局兼容的内容 对我来说 考虑到 底层类型 含义的合理语义 这似
  • 搁置线程是否是最佳选择?

    应用程序有一个辅助线程 该线程并不意味着一直运行 但主进程可以经常调用它 所以 我的问题是 就 CPU 性能而言 什么是更优化的 在不使用线程时挂起线程 还是保持线程处于活动状态并使用 WaitForSingleObject 函数来等待来自
  • Visual Studio 中出现“无效模板参数”错误,但 GCC 中没有

    假设你有代码 template
  • 如何使用 Minitest 登录 Devise to Test Controller

    我是 Rails 测试的新手 在遵循一些在线教程后 我可以设置并运行模型测试 但是 当尝试测试控制器时 测试失败 因为它被重定向到登录页面 我已尝试了网上可以找到的所有登录设备的说明 但仍然无法登录并继续 如果有人能提供帮助并给我前进的方向
  • Python 中的列表推导式用于计算列表的最小值和最大值

    我有以下代码来计算列表的最小值和最大值 以节省内存效率 x min float inf x max float inf for p in points in list x min min x min p x max max x max p
  • Pickle 和装饰类(PicklingError:不是同一个对象)

    以下最小示例使用虚拟装饰器 它仅在构造装饰类的对象时打印一些消息 import pickle def decorate message def call decorator func def wrapper args kwargs prin
  • 环视 积极 消极 向后展望

    在谷歌上搜索 vsvim Lookahead 或 Lookbehind 后wiki我似乎不知道如何 或者是否支持前瞻或后视 正数或负数 以及如何使用它们 如果是 我尝试过几种不同的syntaxes like ze lt let w lt l
  • Microsoft Visual Studio ~ C/C++ 运行时库 ~ 静态/动态链接

    我是 Microsoft Visual Studio 用户 我的问题是关于 C C 运行时库 我创建了一个 空项目 其中包含 cpp 源文件 main cpp 其中包含以下代码 include
  • Spring Boot中构造函数的参数0

    启动我的应用程序时遇到问题 有人可以帮我解决这个问题吗 Parameter 0 of constructor in com journaldev elasticsearch service BookServiceImpl required
  • 在 Android 的 Xamarin 表单中使用警报管理器安排通知

    我创建了一个依赖项来显示通知 在 My DeviceDetails Droid cs 中 我将闹钟设置为 30 秒 当应用程序运行时 本地通知功能可以完美运行 活动但当我杀死应用程序 关闭应用程序 时警报接收器 没有被叫到 public v
  • Xamarin Forms InitializeComponent 不存在

    我正在学习 Visual Studio 2015 的 Xamarin Forms 并尝试使用 Xaml 创建一个简单的共享项目 但我不断收到 InitializeComponent 不存在 以及对 cs 类中 Xaml 控件的任何引用 据我
  • Delphi XE2:在 CHM 中跳到锚点?

    在Delphi XE2程序中 如何跳转到CHM帮助文件主题内的锚点 锚点具有以下格式 从显示 CHM 文件的 HTML HelpViewer 中的主题页面源中提取 a a 我尝试了以下方法 Application HelpJump MyTo