一个对用户友好的应用程序是应该有完善的在线帮助的。.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等其它方法来实现该类帮助,但使用该组件无疑可以大大地减少编程工作量。