请参考:http://www.delphibbs.com/delphibbs/dispq.asp?lid=0626861
我试了一下,大体上可以,但还有一些小问题:
-------------------------------------------------
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
const
HH_DISPLAY_TOC = $0001;
HH_DISPLAY_TOPIC = $0000;
HH_CLOSE_ALL = $0012;
HH_DISPLAY_INDEX = $0002;
HH_HELP_CONTEXT = $000F;
HH_DISPLAY_SEARCH= $0003;
HH_DISPLAY_TEXT_POPUP = $000E;
type
HH_FTS_Query = record
cbStruct : integer; // sizeof structure
fUniCodeStrings : bool; // true if all strings are unicode
pszSearchQuery : PChar; // string with the search query
iProximity : longint; // word proximity
fStemmedSearch : bool; // true for stemmed search only
fTitleOnly : bool; // true for title search only
fExecute : bool; // true to initiate the search
pszWindow : PChar; // window to display in
end; // HH_FTS_Query
HH_POPUP = record
cbStruct: integer; // sizeof this structure
hinst: longint; // instance handle for string resource
idString: UINT; // string resource id, or text id if pszFile is specified in HtmlHelp call
pszText: LPCTSTR; // used if idString is zero
pt: TPOINT; // top center of popup window
clrForeground: COLORREF; // use -1 for default
clrBackground: COLORREF; // use -1 for default
rcMargins: TRECT; // amount of space between edges of window and text, -1 for each member to ignore
pszFont: LPCTSTR; // facename, point size, char set, BOLD ITALIC UNDERLINE
end;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
function HtmlHelp(hwndCaller: HWND; pszFile: PChar; uCommand: UINT;
dwData: PDWORD): HWND; stdcall; external 'hhctrl.ocx' Name 'HtmlHelpA';
procedure TForm1.Button1Click(Sender: TObject);
begin
{
调用缺省主题帮助
此调用方式用于没有上下文ID号的情形,dwData可指定一个在CHM文件内的缺省htm文件,
也可取Nil,这是HtmlHelp API最基本的一种用法。
}
HtmlHelp(handle,pchar('help.chm'),HH_DISPLAY_TOPIC,PDWORD(pchar('article.htm')));
//或:HtmlHelp(handle,pchar('help.chm'),HH_DISPLAY_TOPIC,nil);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
{
调用关键字帮助
此调用方式中dwData取索引文件(.hhk)中存在的关键字。
}
HtmlHelp(handle,pchar('help.chm'),HH_DISPLAY_INDEX,PDWORD(pchar('ambaSio')));
end;
procedure TForm1.Button3Click(Sender: TObject);
var
dw: DWORD;
begin
{
调用上下文敏感帮助
此调用方式用于含有映射信息的CHM文件, dwData取映射表中存在的ID号。
}
dw := 10;
HtmlHelp(handle,pchar('>help.chm'),HH_HELP_CONTEXT,PDWORD(@dw));
//这种方式我没试出来,可能是我的chm文件不含映射信息的缘故。
end;
procedure TForm1.Button4Click(Sender: TObject);
var
query: HH_FTS_Query;
begin
{
调用全文搜索帮助
}
with query do
begin
cbStruct := sizeof(HH_FTS_Query);
fUniCodeStrings := false;
iProximity := 10;
fStemmedSearch := true;
fExecute := true;
fTitleOnly := false;
pszWindow := 'MainWin';
pszSearchQuery := 'd';
end;
HtmlHelp(handle,pchar('help.chm'),HH_DISPLAY_SEARCH,PDWORD(@query));
end;
procedure TForm1.Button5Click(Sender: TObject);
var
popup: HH_POPUP;
begin
{
调用弹出式帮助
PszFile通常取NULL,也可以指定一个CHM和一个在该CHM文件中的TEXT文件,DwData用
于指定一个指向HH_POPUP结构的指针。
}
with popup do
begin
cbStruct := sizeof(HH_POPUP);
hinst:= 0;
idString:=1;
pszText:=nil;
//pt:= pt;
GetCursorPos(pt);
clrForeground:=COLORREF(-1);
clrBackground:=COLORREF(-1);
rcMargins.Left := 0;
rcMargins.Top := 0;
rcMargins.Right := 25;
rcMargins.Bottom := 25;
pszFont:=LPCTSTR('BOLD');
end;
HtmlHelp(handle,pchar('test.chm'),HH_DISPLAY_TEXT_POPUP,PDWORD(@popup));
//这个我也没搞太明白,能出现Popup,但无帮助内容。
end;
end.