在C++Builder中使用Compress Html Help 
作者:VCL  email:[email protected] 
如何在C++Builder中使用Compress Html Help (.chm文件): 
微软提供的HTML HELP Workshop中包含了htmlhelp.h和htmlhelp.lib,用于在程序中使用Compressed Html Help。但其中htmlhelp.lib不能直接在BCB中使用。在BCB中的使用方法如下: implib hhctrl.lib hhctrl.ocx:创建HtmlHelp的库文件。 
在程序中include <htmlhelp.h> 
在工程中加入第一步创建的hhctrl.lib, 
编译即可。 在程序中的实例: HtmlHelp( 
    GetDesktopWindow(), 
    AnsiString(Application->HelpFile + "::/index.htm").c_str(), 
    HH_DISPLAY_TOPIC, 
    NULL); 

解决方案 »

  1.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;type THH_POPUP=record
        cbStruct        :integer;   // sizeof this structure
        hinst           :integer;   // instance handle for string resource
        idString        :DWord;     // string resource id, or text id if pszFile is specified in HtmlHelp call
        pszText         :pchar;     // used if idString is zero
        pt              :TPoint;    // top center of popup window
        clrForeground   :integer;   // use -1 for default
        clrBackground   :integer;   // use -1 for default
        rcMargins       :TRect;     // amount of space between edges of window and text, -1 for each member to ignore
        pszFont         :pchar;     // facename, point size, char set, BOLD ITALIC UNDERLINE
    end;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;const
        HH_DISPLAY_TOPIC        =0;
        HH_DISPLAY_TOC          =1;
        HH_DISPLAY_INDEX        =2;
        HH_DISPLAY_SEARCH       =3;
        HH_DISPLAY_TEXT_POPUP   =$E;var
      Form1: TForm1;Function htmlhelp (hwnd : integer; lpHelpFile :PChar; wCommand,
        dwData :integer):integer; stdcall; external 'hhctrl.ocx' Name 'HtmlHelpA';implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);
    var
      x:THH_POPUP;
    begin
      x.cbStruct := sizeof(THH_POPUP);
      x.hinst := 0;//Application.Handle;
      x.pszFont := 'BOLD';
      x.pszText := 'Samples for me';
      htmlhelp(Self.Handle, 'help.chm::/3.htm',HH_DISPLAY_TOPIC, 0);
    end;假设你的文件名为help.chm,里面包含一个3.htmend.
      

  2.   

    to TechnoFantasy(www.applevb.com):如何在每个对象上响应F1键?
    to sundayboys(sunboy):我对C不熟悉,你能说delphi的吗?
      

  3.   

     bcb大虾的方法:    typedef
            HWND WINAPI  T_HtmlHelpA( HWND hwndCaller,
                                  LPCSTR pszFile,
                                  UINT uCommand,
                                  DWORD_PTR dwData);
        HMODULE hLoadLib=LoadLibrary("HHctrl.ocx");
        if (hLoadLib==NULL)
            {
              ShowMessage("系统不支持HTMLHELP帮助。");
              return;
            }
        T_HtmlHelpA *HtmlHelpA=
              (T_HtmlHelpA *)GetProcAddress((HINSTANCE)hLoadLib,"HtmlHelpA");
        HtmlHelpA(Handle,"oicq.chm",HH_DISPLAY_TOPIC,NULL); 设置Form的HelpContext或HelpFile属性。 就可以响应F1键
      

  4.   

    Delphi不支持chm文件作为帮助文件,不过有变通的方法,在程序界面上按F1键,会
    引发Appication的OnHelp事件,在程序启动时设定事件处理函数就可以了:unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        procedure FormCreate(Sender: TObject);
      private
        function AppHelp(Command: Word; Data: Longint; var CallHelp: Boolean): Boolean;
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}function TForm1.AppHelp(Command: Word; Data: Longint; var CallHelp: Boolean): Boolean;
    begin
      ShowMessage(IntToStr(Data));
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      Application.OnHelp:=AppHelp;
      Button1.HelpContext := 1;
      Button2.HelpContext := 2;
    end;end.上面的代码在程序启动时将OnHelp设定为AppHelp,并设定Button1以及Button2的
    HelpContext。然后在控件具有焦点时按F1键就可以弹出MessageBox显示HelpContxt
    结合前面的代码就可以显示相应的帮助了.
      

  5.   

    TechnoFantasy(www.applevb.com) 能不能把按F1 的这一段写详细一点,我刚刚开始接触Delphi.
      

  6.   

    生成chm时不是可以设置索引吗?估计是不是跟那个有关?查找与当前帮助对象类似的索引.
      

  7.   

    TechnoFantasy(www.applevb.com):我试了你的方法,老是报错,说不是windows帮助文件或该文件已经损坏。不行啊!
      

  8.   

    应该不会出现这样的错误,除非你的帮助文件损坏或者你设定了Form的HelpFile属性,不要设定该属性,直接在AppHelp子程序中根据Data指定的ID来调用CHM文件的相应部分,调用的方法就是上面的。另外如果可以希望能看看你的代码,这样更好分析。
      

  9.   

    to TechnoFantasy(www.applevb.com):谢谢你,我后来没有用您说的那个办法,但是您提供的思路很好,我用的办法是,
    直接在主窗体的OnHelp中写入代码调用相应的部分,结果没有问题!还有一个额外的问题问问,我用的那个WHD HTML3.51英文版对中文支持不好,在生成的chm帮助文件中左侧的目录中不
    能显示中文,是一堆乱码(右边的显示页面没有问题),谁有什么办法解决?加高分,非常感谢!
      

  10.   

    可能没有什么好的办法,你可以到google.com上找一下是否有中文支持的版本。我使用的
    是微软的html workshop.这个可以支持中文