在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);
作者: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);
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.
to sundayboys(sunboy):我对C不熟悉,你能说delphi的吗?
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键
引发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
结合前面的代码就可以显示相应的帮助了.
直接在主窗体的OnHelp中写入代码调用相应的部分,结果没有问题!还有一个额外的问题问问,我用的那个WHD HTML3.51英文版对中文支持不好,在生成的chm帮助文件中左侧的目录中不
能显示中文,是一堆乱码(右边的显示页面没有问题),谁有什么办法解决?加高分,非常感谢!
是微软的html workshop.这个可以支持中文