Mac Wang 2003-3-3
看到本文的标题后,可能你对HTML Help WorkShop还有点陌生。但如果我告诉你它就是制造CHM的家伙,你一定会觉得亲切得多。随着CHM的流行,你可能需要在某个时候为你的系统编写CHM文件。这里向大家介绍几个在使用HTML Help Workshop过程中的技巧,希望到时候能够使你的工作更加轻松。
本文不想写成HTML Help Workshop Tutorial或者User Guide之类的东西,关于这些基本的介绍可以参考HTML Help Workshop自身的帮助或者网上的文章,在这里我只是介绍一些技巧性的东西以及曾经困扰我的问题。所以大家最好能够对HTML Help Workshop有一定的了解。
一、反编译CHM文件
一般来说,制作一个CHM文件的步骤是:创建HTML帮助项目文件,然后加入目录文件、索引文件以及HTML源文件,最后编译就得到最终的CHM文件。但有的时候,你可能需要修改一下现有的CHM文件,这个时候你就需要用到HTML Help Workshop的反编译CHM文件的功能。它可以将现有的CHM文件反编译成相应的HTML源文件,目录文件和索引文件(如果存在的话)。
图一:反编译CHM文件
注意:CHM文件反编译之后,可以得到目录文件(.HHC)、索引文件(Index文件 .HHK)以及HTML等源文件,但是还缺少项目文件(.HHP)。如果你想修改后重新编译的话,必须自己创建HHP文件,然后把那些文件加入到该项目中(新建项目时可以选择采用现有的文件)。
图二:新建工程时选择已有的文件
二、查找替换的技巧
用HTML Help Workshop来制作CHM文件非常的简单方便,但是存在着几个明显的缺陷,这主要体现在对查找替换的支持不足。虽然在HTML Help Workshop中提供了查找替换的功能,但是非常简单,只能在单个文件中进行查找,不支持高级的查找功能,比如我现在需要将一英文CHM文件翻译成中文文件,我希望能够将所有文件中的“property”替换成“属性”,那问题就来啦,你必须重复地执行打开文件-〉查找替换-〉保存文件的操作,非常的麻烦。
当然解决办法是有的。因为这些源文件都是HTML文件,你可以利用其它的编辑器来打开,并利用这些编辑器提供的查找替换功能来实现上面的操作。注意:最好不要选用Microsoft Visual InterDev作为编辑器,因为它可能会把HTML文件中的弹出式菜单给转换掉,而应该采用UltraEdit等纯文本编辑器。
如果说这个还算比较容易解决的话,那下面这个问题可着实困挠了我很久。因为在英文CHM文件的目录和索引中也存在着大量的重复单词(比如property,method等),我需要将它们一一翻译成中文。但HTML Help Workshop根本不提供在目录和索引中进行查找和替换的功能。莫非我只能一个个地进行修改,要知道那可有成千上万个地方需要修改。不要惊讶,我开始就是这样进行操作的,在经过几次痛苦的反复之后,我决定寻找解决的办法。
首先,因为HTML Help Workshop主要对HTML文件进行操作,那我想是否目录文件(.hhc)或者索引文件(.hhk)也可能是HTML文件。我试着用UltraEdit来打开这些文件,居然成功,你可以看到整齐的<UL><LI>排列,接下来你该知道怎么做!
三、任意风格窗口样式的设定
HTML Help Workshop默认的窗口样式只包括目录和索引,我想大部分人都不会满足于此,那你就必须自己动手来设定你自己的窗口样式。点击“Project”栏中的“Add/Modify window definitions”按钮得到“Window Types”对话框,你可以在那里设定任意的窗口样式,比如加入搜索和书签等功能。
图三:选择Add/Modify window definitions按钮
图四:Window Types对话框设定任意的窗口风格
四、弹出式菜单的设计
图五:弹出式菜单的效果
在CHM文件中比较常用的一种效果就是弹出式菜单,非常方便直观,要实现这样一种效果非常的简单,下面就是一段示例代码(图中红字部分):
<HTML>
<HEAD>
<TITLE>accType 属性</TITLE>
<link REL="stylesheet" TYPE="text/css" HREF="stylesheet.css">
</HEAD>
<BODY>
<p><h1>accType 属性</h1></p>
<p>
<OBJECT TYPE="application/x-oleobject" CLASSID="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11" ID="accType_SA">
<PARAM NAME="Command" value="Related Topics, MENU">
<PARAM NAME="Text" VALUE="Text:请参阅">
<PARAM NAME="Flags" VALUE="1">
<PARAM NAME="Font" VALUE="Helvetica,8,,#808080,PLAIN">
</OBJECT>
<OBJECT TYPE="application/x-oleobject" CLASSID="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11" ID="accType_EX">
<PARAM NAME="Command" value="Related Topics, MENU">
<PARAM NAME="Text" VALUE="Text:范例">
<PARAM NAME="Flags" VALUE="1">
<PARAM NAME="Font" VALUE="Helvetica,8,,#808080,PLAIN">
</OBJECT>
<OBJECT TYPE="application/x-oleobject" CLASSID="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11">
<PARAM NAME="Command" value="Related Topics, MENU">
<PARAM NAME="Text" VALUE="Text:应用于">
<PARAM NAME="Flags" VALUE="1">
<PARAM NAME="Item1" VALUE="Account Object;Account.html">
</OBJECT>
</p>
<p><p>该属性表示帐号的类别。</p>
</p>
<p><b>返回值</b></p><p>返回<b>字符串</b>值。</p>
<p><b>语法</b></p><p><i>object</i><b>.accType</b> [= <i>value</i>]</p><p>具体说明:</p>
<p>
<TABLE border=1 cellpadding=5 cols=2 frame=below rules=rows width=587>
<TR VALIGN="top">
<TD width=27%><B>变量</B></TD>
<TD width=73%><B>详细描述</B></TD>
</TR>
<TR VALIGN="top">
<TD width=27%><I>object</I></TD>
<TD width=73%>一<b><a href="Account.html">Account</a></b>对象。</TD>
</TR>
<TR VALIGN="top">
<TD width=27%><I>value</I></TD>
<TD width=73%>一<b>字符串</b>值。</TD>
</TR>
</TABLE></p>
</BODY></HTML>
参考资料:
1、关于HTML Help Workshop的使用指南,可以参考边城狂人的“HTML 帮助的制作和使用”(http://outinn.myrice.com/book/htmlhelp/index.htm)。