zoukankan      html  css  js  c++  java
  • Delphi 使用CHM文件制作系统帮助文档(上下文感知帮助的制作)

    一、基础知识简介

            使用帮助提示窗口或状态栏只能提供简单、单一的帮助,无法对某一模块或应用程序整体提供系统的

    帮助,因此运行Windows应用程序,需要帮助时一般都可以通过执行帮助菜单获得整个应用程序的帮助,也可

    运行某一部分时单击帮助按钮或按“F1”键获得相关的帮助。Delphi应用程序能够方便地应用帮助系统。下面介

    绍应用程序动态地运行帮助系统的方法。

     

    1、CHM文件的结构

            CHM(Compiled Help Manual):已编译的帮助文件,是微软新一代的帮助文件格式,利用HTML作源

    文,把帮助内容以类似数据库的形式编译储存。一个主题一个html文件,然后合成一个完整的chm文件。

     

    2、CHM文件反转成HTML文件的方法

            可以利用Windows自带的hh.exe文件来进行文件格式转换,语法为:hh -decompile 目标文件夹源C

    HM文件名。

            hh.exe是微软windows系统程序,CHM扩展名的帮助文件默认是用hh.exe打开。如果用户此时并没有查

    看chm格式的电子书文件或帮助文件,hh.exe又在进程中反复出现,则可能中了hh.exe病毒。在正常情况下不建议

    用户对该类文件(hh.exe)进行随意的修改。它的存在对维护计算机系统的稳定具有重要作用。

     

    3、使用Windows操作系统的API函数:HtmlHelpA:(HtmlHelpA位于hhctrl.ocx)

    Function HtmlHelpA(hwndcaller:Longint; lpHelpFile:string; wCommand:Longint;dwData:string): HWND;

    stdcall; external 'hhctrl.ocx'

     

    具体参数含义如下:

    hwndCaller:调用该函数的窗体句柄

    pszFile:帮助文件的名称和位置

    uCommand:帮助类型

    dwData:与uCommand相匹配的附加参数,定位CHM的关键字。

     

    在使用的时候,首先要定义uCommand 常数:

    Const HH_DISPLAY_TOPIC = $0

    Const HH_DISPLAY_INDEX=$2

    Const HH_HELP_CONTEXT = $F

    Const HH_DISPLAY_SEARCH= $3

    Const HH_DISPLAY_TEXT_POPUP= $E

     

    4、HtmlHelpA的调用方法

    1>、调用缺省主题帮助

    HtmlHelpA(Application.Handle, 'help.chm',HH_DISPLAY_TOPIC , 'Index.html');

    此调用方式用于没有上下文ID号(HelpContext)的情形,dwData可指定CHM文件内的存在或缺省htm文件。

     

    2>、调用关键字帮助

    HtmlHelpA(Application.Handle, 'help.chm', HH_DISPLAY_INDEX , '关键字');

    此调用方式中dwData取索引文件(.hhk)中存在的关键字。

     

    3>、调用上下文敏感帮助

    HtmlHelpA(Application.Handle, 'help.chm', HH_HELP_CONTEXT , 1000);

    此调用方式用于含有映射信息的CHM文件,dwData取映射表中存在的ID号。当为0时则不调用帮助文件。

     

    4>、调用全文搜索帮助

    HtmlHelpA(Application.Handle, 'help.chm', HH_DISPLAY_SEARCH , Query);// Query为HH_FTS_QUERY

    此调用方式dwData参数指定一个指向HH_FTS_QUERY结构的指针。

     

    5>、调用弹出式帮助

    HtmlHelpA(Application.Handle, 'help.chm', HH_DISPLAY_TEXT_POPUP, Popup);// Popup为HH_POPUP

    此调用方式PazFile通常取空,也可以指定一个CHM和一个在该CHM文件中的TEXT文件;dwData参数指定

    一个指向HH_POPUP结构的指针。

     

    5、为CHM文件指定显示窗体形式

            由于显示帮助文件的缺省窗体是在编译该CHM文件时的窗体,因此为了更好地控制帮助文件的显示,

    在制作CHM文件时,可以自定义一个窗体形式。在程序中可以通过两种方法来调用自定义窗体。当uCommand

    为HH_DISPLAY_TOPIC或HH_HELP_CONTEXT时,在pszFile文件名的后面加上窗体名称: 'help.chm>Form4'

     

    二、制作CHM帮助文件

            关于制作CHM文件的工具,我们可以使用微软的 HTMLHelpWorkshop(以下简称HHW)或者“国华软件工

    作室”的eTextWizard(电子文档处理器,以下简称EW)。以HHW为例:假设我们制作好的主页放在C: est目录中,

    其中有一个index.html,通过它可以链接到所有其他的文件。

    具体步骤:

    1、打开HTMLHelpWorkshop,单击“File→New”菜单(或者单击工具栏第一个按钮),出现“New”对话框,选

    择其中的“Project”后,按“OK”,创建一个工程。

    2、这一步的对话框提供了从*.hlp到*.chm文件的转换,在此我们不需要,直接按“下一步”。

    3、这一步的对话框要求指定工程的位置。单击“Browse”,进入C: est目录,并在文件名中键入“test”,

    这时文本框中应出现“C: est est.hlp”,然后按“下一步”。

    4、这一步要求选择你已为工程创建的文件类型,在此我们选择第三个“HTMLfiles(.htm)”。

    5、现在需要添加我们制作好的HTML文件,按“Add”,选择“C: estindex.html”,将它添加到列表框。然

    后单击“完成”即可。 注意:只要被index.html文件直接或间接链接到的文件,都会包含进去,因此不必将

    所有的文件添加进去!

    6、单击“File→Compile…”(或工具栏第三个按钮),出现“Createacompiledfile”对话框,直接单击

    “Compile”。

    7、测试

            在资源管理器中双击生成的C: est est.chm,在页面单击右键,在菜单中选择“属性”,在“属性”

    对话框中复制其中的“地址”(应该为mk: @MSITStore:C: est est.chm::/index.html)。将上面的地址粘贴

    到浏览器的地址栏中,如果正确,按回车可以在浏览器中看到正确的页面。

     

    三、非关联的CHM帮助

    在Delphi中,可以通过ShellExecute函数直接调用chm帮助文件,具体如下:

    var   

      HWndHelp: Hwnd;

      i: integer;

    begin

      //检查帮助窗口是否已经存在

      HWndHelp := FindWindow(nil, 'conHelpTitle');

     

      // 如果存在则关闭

      if HwndHelp <> 0 then

        SendMessage(HwndHelp, WM_CLOSE, 0, 0);

     

      // uses shellapi

      i := ShellExecute(handle, 'open', '.help.chm', nil, nil, sw_ShowNormal);

     

      // 如果i不为42

      if i <> 42 then

        Showmessage(' help.chm 帮助文件损坏!');

    end;

     

    四、上下文关联的CHM帮助

    在Delphi中实现上下文关联的CHM帮助,可以调用Windows系统目录System32下的HHCTRL.OCX控件中

    的HtmlHelpA函数实现。 需要以下几个步骤:

    1、设置相关控件的HelpContext属性。

     例:主窗体frmMain:10100 ,其中的文本框 edtInput:10101  

     

    2、声明HtmlHelpA函数

    Function HtmlHelpA(hwndcaller:Longint; lpHelpFile:string; wCommand:Longint;dwData:string): HWND;

    stdcall; external 'hhctrl.ocx'

     

    3、  编写函数,按F1键调用帮助文档

    //自定义公用函数ShowChmHelp显示不同帮助画面。

    procedure ShowChmHelp(sTopic: string);

    Const

      HH_DISPLAY_TOPIC = $0;

    var

      i: integer;

    begin

      // 直接打开帮助文件的默认主题。HH_DISPLAY_TOPIC

      i := HtmlHelpA(Application.Handle, '.help.chm',HH_DISPLAY_TOPIC , sTopic);

      if i = 0 then

      begin

        Showmessage(' help.chm 帮助文件损坏!');

        exit;

      end;

    end;

     

    function TForm4.FormHelp(Command: Word; Data: Integer;

      var CallHelp: Boolean): Boolean;

    begin

      case Data of

        10100: ShowChmHelp('frmMain.htm');

        10101: ShowChmHelp('edtInput.htm');

      else

        ShowChmHelp('default.htm');

      end;

    end;

    注意:在使用Form的OnHelp时,必须将Form的属性: BorderIcons| BiHelp改为TRUE才可以

  • 相关阅读:

    梯度下降法
    维特比算法
    分治法
    动态规划
    hadoop学习视频
    Java深拷贝浅拷贝
    Android NDK r8 Cygwin CDT 在window下开发环境搭建 安装配置与使用 具体图文解说
    Linux高性能server编程——定时器
    OpenGL进阶演示样例1——动态画线(虚线、实线、颜色、速度等)
  • 原文地址:https://www.cnblogs.com/ljl_falcon/p/3270739.html
Copyright © 2011-2022 走看看