各位,在delphi5编的程序中如何调用chm格式的帮助文件?(上下文相关helpcontext)(50分)

  • 主题发起人 主题发起人 mmww
  • 开始时间 开始时间
M

mmww

Unregistered / Unconfirmed
GUEST, unregistred user!
各位,在delphi5编的程序中如何调用chm格式的帮助文件?(上下文相关helpcontext)
 
用API,有专门的包
 
HINSTANCE ShellExecute(
HWND hwnd, // 父窗口的句柄
LPCTSTR lpOperation, // 指向表示所要进行操作的字符串的指针
LPCTSTR lpFile, // 指向表示文件或文件夹名的字符串的指针
LPCTSTR lpParameters,// 指向表示可执行文件的参数的字符串的指针
LPCTSTR lpDirectory, // 指向表示默认目录的字符串的指针
INT nShowCmd // 表示文件是被显示还是打开
);
这个应该可以。
 
请参考: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.
 
多人接受答案了。
 
后退
顶部