用HtmlHelp组件在Delphi应用程序中实现Html帮助

原创 2002年04月22日 09:44:00

 

    一个对用户友好的应用程序是应该有完善的在线帮助的。.hlp格式的帮助文件作为Windows平台的标准帮助文件格式而得到了广泛的应用,同时也受到很多应用程序开发环境,比如Delphi等的良好支持。随着微软从Windows98开始支持.chm(已编译的 HTML 帮助文件)格式的帮助文件以来,这一界面更加友好的帮助文件格式得到了越来越广泛的应用。

    目前,Delphi还不能象支持.hlp帮助那样直接地支持.chm格式的上下文帮助。但是,通过第三方的HtmlHelp组件,在Delphi应用程序中实现Html帮助变得同样简单。本文详细地介绍了HtmlHelp组件及其在开发Delphi应用程序中的应用。

1.下载HtmlHelp组件

    HtmlHelp组件是在MPL许可证下发行的,该组件完全免费,并提供源代码供下载。下载网址为:http://www.serveisgirona.com/delphi/htmlh/index.htm。该组件的当前版本为1.0版。

2.安装HtmlHelp组件

    打开下载得到的压缩包htmlpak.zip(无示例程序)或htmlall.zip(含示例程序),把它解压到一个目录下,比如/Delphi5/lib/HtmlHlp。在Delphi中打开该目录下的hhpack.dpk文件,将弹出包管理器。点击包管理器工具栏的Options按钮,在弹出的Project Options对话框的Directories/Conditionals选项卡上,将Unit output directory选项设置为$(DELPHI)/lib。点击工具栏上的Compile按钮编译该组件包,然后点击Install按钮安装它。在完成正确的安装后,在Delphi的组件栏上新增了一个名为HTML Help的组件面板,该面板上只有HtmlHelp一个组件。

3.HtmlHelp组件的属性和方法

    HtmlHelp只提供了几个简单实用的属性和方法,下面对它们作一个详细的介绍。

3.1HtmlHelp的属性

HtmlHelp提供了如表1所示的三个属性:表1 HtmlHelp组件的属性属性名称数据类型类 型描 述 ChmFileStringPublished帮助文件的名称。你必须把该属性设置成帮助文件的绝对路径和文件名,否则在程序运行过程中改变当前目录时程序找不到相应的帮助文件。 WinDefStringPublished你在创建HTML帮助文件的时候可能创建了自定义的窗口定义。你可以在这儿指定你要使用的窗口定义。 DefautFileBooleanPublished你可以设置是否使用缺省的帮助文件名。当该属性设置为false时,组件将使用由ChmFile指定的帮助文件。如果你将该属性设置为true,组件将自动把ChmFile属性设置为空串,并在初始化时检查你是否设置了Application.HelpFile。如果设置了Application.HelpFile(在Project Options的Application选项卡上设置或者在程序初始化主窗体前用代码设置),组件将检查并展开该HelpFile属性值,以得到帮助文件的完整路径和文件名;如果你没有设置Application.HelpFile,组件将试图把帮助文件设置为应用程序所在目录下的与程序同名,但是扩展名为.chm的文件。 需要说明的是,在该组件的1.0版本中,在DefaultFile属性的实现上有一些问题,并不能象组件的帮助文档中所说的那样完成自动搜寻功能。你要么把DefaultFile属性设置为false,并在ChmFile属性中设置帮助文件的绝对路径和文件名;要么把DefaultFile属性设置为true,并在Application.HelpFile中指定帮助文件名(不能含任何路径信息)或帮助文件的绝对路径及文件名。笔者已经修改了该组件,并给组件作者发了信,相信作者很快就会推出修正版本。 3.2 HtmlHelp组件的方法 HtmlHelp提供了5个方法,用于控制显示相关的帮助窗口和帮助主题。表2 HtmlHelp组件的方法方法定义方法描述 function HelpContext(ContextId: DWord): Integer;显示与ContextId关联的帮助主题。如果一个窗体上的Delphi组件对象的HelpContext属性被设置,则在该对象获得焦点时,按下F1键后将调用该方法,并将HelpContext属性值传递给ContextId。 function HelpTopic(Topic: String): Integer;显示以Topic为主题的帮助信息。 function ShowIndex:integer;在帮助窗口的导航面板上显示索引页。 function ShowTableofContents:integer;在帮助窗口的导航面板上显示目录列表。 function ShowSearch:integer; 在帮助窗口的导航面板上显示搜索页。 4.使用HtmlHelp组件 HtmlHelp组件的使用十分方便。下面以一个简单示例来具体说明该组件的使用方法。该示例程序为一个简单的打开文件对话框,如图1所示。应用程序名为HtmlHelpDemo.exe。

 图1 打开文件对话框


在Delphi应用程序设计中使用HtmlHelp组件实现Html帮助的步骤如下: ⑴创建CHM格式的帮助文件。你可以使用微软的Html Help Workshop(下载地址为http://msdn.microsoft.com/library/tools/htmlhelp/wkshp/htmlhelp.exe)来创建CHM帮助文件,也可以用第三方的帮助文件创作工具,比如Help & Mannual、DotHELP等软件来创建。具体的创建方法请参见相关软件的使用手册,这里就不加讨论了。但必须要注意的一点是,要在应用程序中使用上下文帮助,就必须为相关的主题指定一个相应的ContextID。在示例程序中,使用了一个名为HtmlHelpDemo.chm的帮助文件。该文件包含了4个主题,分别为打开对话框、文件名称编辑框、浏览按钮和文件类型复选框的帮助信息,相应的ContextID依次为1000、1001、1002和1003。 ⑵从HTML Help组件面板上把一个HtmlHelp组件放到应用程序的主窗体上,并设置其属性值。在本例中,因为打开对话框就是主窗体,因此该组件就放在它上面。通常情况下,可以直接使用其缺省的属性值,即将DefaultFile设置为true,然后使用与应用程序位于同一目录下,文件名相同而扩展名为.chm的帮助文件,或者在Application.HelpFile属性中设置要使用的帮助文件名。当然,你也可以在组件的CHMFile属性中指定要使用的帮助文件的绝对路径和文件名,但是不推荐这样做,因为通常不便于把帮助文件安装到固定的目录下。在本例中,全部使用了HtmlHelp组件的缺省值,并且没有设置Application对象的HelpFile属性。 ⑶为需要显示上下文帮助的组件对象设置HelpContext属性值。比如在图2中,把文件名称编辑框组件的HelpContext设置为1001。



图2 设置组件对象的HelpContext属性


⑷在其它需要显示帮助信息的事件响应过程中,调用HtmlHelp组件的相应方法。在本例中,当点击帮助按钮时,需要显示有关该对话框的帮助信息,其事件响应过程如下所示: procedure TOpenDlg.HelpBtnClick(Sender: TObject); begin HtmlHelp1.HelpContext(1000); end; ⑸完成应用程序设计的其它部分,并生成应用程序。在本例中,生成了名为HtmlHelpDemo.exe的应用程序,并且把帮助文件HtmlHelpDemo.chm拷贝到了相同的目录下。运行该程序,在文件名称编辑框获得焦点的情况下,按下F1键,弹出了如图3所示的帮助信息。



图3 文件名称编辑框的上下文帮助


点击帮助按钮时,显示了如图4所示的有关打开对话框的帮助窗口。


图4 打开对话框的帮助信息


5.结束语使用HtmlHelp组件,可以很方便地在Delphi应用程序中实现Html帮助。尽管可以通过直接调用HtmlHelp API等其它方法来实现该类帮助,但使用该组件无疑可以大大地减少编程工作量。

Delphi 编写COM+组件的知识和样例

一、COM组件的基础知识介绍: 1、什么是COM          COM是微软定的一种组件编写的规范,目的是为了实现组件的重用,不管你是用C、DELPHI、VB什么语言写的,只要遵守这种规范就是...
  • zang141588761
  • zang141588761
  • 2016年04月26日 09:19
  • 1235

使用HTML HELP WORKSHOP制作CHM帮助文档

 制作chm电子书完美详解   2 3 4 5 6 7 分步阅读 Microsoft开发的制...
  • alzhuzhu
  • alzhuzhu
  • 2014年06月08日 17:53
  • 1744

DELPHI组件安装全攻略

一、前言     由于系统不稳定,经常要重装DELPHI。而每次安装DELPHI的时候,原来注册的组件都被刷新,只能重新安装组件。众所周知,DELPHI的第三方组件N多,这个安装着实令人头疼。更...
  • aTian2009
  • aTian2009
  • 2013年01月24日 16:37
  • 1340

用WebBrowser实现HTML界面的应用和交互

unit Unit1; interface uses   Winapi.Windows, Winapi.Messages, System.SysUtils, System.Var...
  • liwb1987
  • liwb1987
  • 2014年08月28日 13:16
  • 499

Delphi SetParent 嵌入其他应用程序

[代码]Delphi实现窗体内嵌其他应用程序窗体 实现原理是启动一个应用程序,通过ProcessID得到窗体句柄,然后对其设定父窗体句柄为本程序某控件句柄(本例是窗体内一个Panel的句柄)...
  • xtfnpgy
  • xtfnpgy
  • 2014年10月08日 21:45
  • 1585

Delphi 两个应用程序(进程)之间的通信

两个应用程序之间的通信实际上是两个进程之间的通信。由于本人知识有限,决定应用消息来实现。需要用到的知识: 1.RegisterWindowMessage() //参数类型:pchar;返回值:Long...
  • xieyunc
  • xieyunc
  • 2015年09月25日 21:43
  • 1951

如何让你的程序支持HA?

关于HA以及OceanBase中HA的应用请参考前面的两篇博客: HA在OceanBase中的应用, OceanBase中主备Rootserver如何管理切换 实现程序支持HA,要点是能够检测到VIP...
  • maray
  • maray
  • 2013年09月13日 22:23
  • 2800

HTML5 应用程序缓存

1、HTML5 应用程序缓存   使用 HTML5,通过创建 cache manifest 文件,可以轻松地创建 web 应用的离线版本。 2、什么是应用程序缓存(Application Cache)...
  • qq_27626333
  • qq_27626333
  • 2016年06月28日 20:32
  • 421

7 个效果震憾的 HTML5 应用组件

From : http://www.oschina.net/news/41941/7-html5-apps?from=20130707 在HTML5的世界里,任何文本、图像都可以变得令人难以想象...
  • csharp25
  • csharp25
  • 2013年07月10日 17:09
  • 1609

delphi 控件大全(确实很全)

delphi 控件查询:http://www.torry.net/   http://www.jrsoftware.org Tb97 最有名的工具条(ToolBar)控件库,仿Off...
  • fishmai
  • fishmai
  • 2016年09月11日 08:15
  • 1565
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用HtmlHelp组件在Delphi应用程序中实现Html帮助
举报原因:
原因补充:

(最多只允许输入30个字)