BCB6/Delphi7下完美调用CHM帮助

2008-02-23 05:38:16来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

本文主要讲解如何在C Builder6.0及之前的版本中使用Microsoft的新型帮助:"CHM格式帮助文档",对于如何制作CHM格式帮助,连同如何获取帮助文档制作工具,本文只会一笔带过,给出官方链接或推荐其他这方面好的教程,就不再赘述。

CHM格式帮助文档制作工具
需要Microsoft的html help workshop来制作CHM格式的帮助,能够到Microsoft站点下载:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/htmlhelp/html/hwMicrosoftHTMLHelpDownloads.asp

好的CHM帮助制作教程
学习如何制作CHM格式帮助文档,请参考:
Html Help Sample in Delphi[卡夫].chm 作者:卡夫[cgcalf@263.net]
跟我学HtmlHelp Workshop[冯惠军][石家庄铁道学院].chm 作者:冯惠军[石家庄铁道学院]

假如想了解更多关于Microsoft Html Help的知识,能够查阅:
Microsoft Html Help Docs.zipMicrosoft官方文档
更好的是直接在线查阅Microsoft的官方文档,到MSDN搜索关键字:"html help",能够搜索到很多关于Microsoft html help的内容,有最新的html workshop下载、在线API手册、制作帮助文档示例等等。

到这里,我假设读者已安装了Microsoft html help workshop,且已掌控如何制作CHM格式帮助文档。
本文中程式中调用的示例帮助文档包含四个主题,这四个主题的源代码如下:
1001.htm
<html>
<head>
<title>第一个主题</title>
</head>
<body>
<p>第一个主题</p>
</body>
</html>

1002.htm
<html>
<head>
<title>第二个主题</title>
</head>
<body>
<p>第二个主题</p>
</body>
</html>

1003.htm
<html>
<head>
<title>第三个主题</title>
</head>
<body>
<p>第三个主题</p>
</body>
</html>

1004.htm
<html>
<head>
<title>第四个主题</title>
</head>
<body>
<p>第四个主题</p>
</body>
</html>

添加索引“第一个主题”、“第二个主题”、“第三个主题”、“第四个主题”,添加搜索关键定“第一个主题”、“第二个主题”、“第三个主题”、“第四个主题”,制作好CHM帮助文档。下一步的工作,是添加此帮助文档对程式UI界面的上下文敏感关系。方法如下:
用文本编辑器写一个.h文档(头文档,CHM编译器需要用他),文档名任意,内容如下:
#define 第一个主题 1001
#define 第二个主题 1002
#define 第三个主题 1003
#define 第四个主题 1004
即把主题“第一个主题”定义为一个数字1001...,向CHM工程文档中添加这个.h文档,方法如下:
(1).打开HTML HELP WorkShop,打开刚才这个CHM工程,在Project页面上左侧,点击第四个按钮“HtmlHelp API information”,在弹出的界面上点击“Alias”,添加主主题的别名,添加“第一个主题”对应html文档1001.htm...;
(2).在刚才的“HtmlHelp API Information”弹出界面上点击“Map”,点击右侧第一个按钮“Head Files”,选择“include”刚才制作的那个.h文档
(3).重新编译CHM工程,生成的文档就是满足需要的有上下文敏感关系的CHM帮助文档了。
测试一下您的CHM格式帮助文档是否正确,点击HTML HELP WorkShop的“Text”->“HTMLHelp API”,在弹出的界面上,浏览刚才生成的CHM文档,“Command”选择“HH_HELP_CONTEXT”,第二个参数“Window”默认,第三个参数“Map Numbers”,输入那个.h文档中定义的数字,点击确定,就会打开这个CHM文档并激活相关的主题了。

到这为止,已成功了一半,我们已用HTML HELP WorkShop制作出了上下文敏感的CHM格式帮助,下一步的重点是在C Builder和Delphi中来调用这个上下文敏感的CHM帮助文档。
早期的Windows中,Microsoft 为其设计了一套API,用于Windows Help系统,一直到Windows XP SP2仍然保留这套API,他的问题是,只能表现文字等简单内容,不能象HTML而那样表现丰富的内容。因此,Microsoft在1998年推出了全新一代的帮助系统:Compiled Help Manual,将HTML文档编译和压缩,提供了WEB页相同的丰富的表现力,停止了对旧的Windows Help的研发。
Borland C Builder 6.0/Delphi7.0及之间的版本的用户手册等资源都是旧的Windows Help的,而VCL也只提供了对旧的Windows Help的支持,在当今WEB流行的今天,假如您的软件还用旧的Windows Help,未免有些老土吧!
我搜索了大量的网络资源并在季老大的帮助下,完美解决了在C Builder6.0/Delphi7.0及以前版本中使用上下文敏感的CHM格式帮助的方法。
VCL默认支持旧的上下文敏感的Windows Help,通过配置控件的HelpContext值来指定和控件相关的帮助主题,假如Application收到WM_HELP消息,就会解析WM_HELP消息中的HelpContext,调用Windows Help,显示相关的主题,因此,调用CHM格式帮助时,我们也需要配置相应控件的HelpContext(值就是上面定义的.h文档中的和主题相关的数值),我们需要截获发到程式中的WM_HELP消息,分析HelpContext,并调用我们自己制作的CHM帮助,一切就完成了。但是事实却没有这么简单。
(1).HTML Help的API都封装在hhctrl.ocx库中(Windows 98及以后的Windows系统安装这一个库),因此,我们使用Borland研发工具中的导入工具implib.exe即能够导入这个库的静态版本:implib hhctrl.lib hhctrl.dll,把这个静态库添加到我们的工程中,在我们的程式中添加htmlhelp.h头文档(Borland研发工具已包含这个头文档),即能够调用HELP Help的API了;
(2).VCL构架的应用程式在以下三种方式中收到WM_HELP消息:在主菜单及其菜单项上按F1、在窗体元素上按F1、在弹出的PopupMenu上按F1,第一种和第二种情况下的消息很容易截取,但是第三种情况却比较特别,VCL对PopupMenu消息的处理比较特别,他封装了一个不可见的窗体PopupList->Window来统一管理弹出菜单的消息,十分感激季老大,我才截取了第三种方式的WM_HELP消息。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: 在C/C 中如何构造通用的对象链表

下一篇: 如何显示/隐藏IE浏览器工具窗口