请问如何在delphi中调用html help 做的帮助.chm文件?请给出代码?谢谢! 请问如何在delphi中调用html help 做的帮助.chm文件?请给出代码?谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 HtmlHelp(Handle, PChar('my.chm'+'::/网页所在目录/网页文件名.htm'),1,0)'my.chm':chm文件名'::/网页所在目录/网页文件名.htm':网页被编译到chm文件时相对于工程文件的所在路径和该网页的文件名。 上面所写是在程序运行中直接跳转到相关的帮助页。这是声明: function HtmlHelp(hwndCaller: HWND; pszFile: PChar; uCommand: Integer; dwData: DWORD): HWND; stdcall; external 'hhctrl.ocx' name 'HtmlHelpA';就OK了。 procedure TMainForm.AboutSystem;var PathHelpFile:string;begin PathHelpFile := 'hh.exe D:\COSTING\costing.chm'; if Winexec(Pchar(PathHelpFile), sw_normal) < 31 then DJShow(CON_NO_FIND_APP); //自定義未找到顯示對話框end;procedure TMainForm.btnHelpClick(Sender: TObject);begin AboutSystem; //調用end;在工程單元 Application.Initialize;加入代碼: Application.HelpFile := 'D:\COSTING\costing.chm'; //指定幫助文件位置 用函数winexec(路径,文件)! 抄来的,呵呵Delphi5并不支持HTML HELP帮助系统,它仍然使用WinHelp。笔者通过反复尝试,发现调用Windows系统目录System32下的HHCTRL.OCX,利用其中的HtmlHelpA函数接口可以自行实现HTML HELP帮助。 公共模块代码如下: unit HTMLHELPCOMMON interface uses Windows; type DWORD_PTR = ^DWORD; Function HtmlHelp(hwndCaller:HWND;strFile:String; uCommand:UINT; dwData:DWORD_PTR ):HWND; procedure CloseHtmlHelp; implementation uses SysUtils; const HHControlInstance:THandle=0; dwCookie :DWORD = 0; var HtmlHelpA:function ( hwndCaller:HWND; pszFile:PChar ; uCommand:UINT; dwData:DWORD_PTR ):HWND;stdcall; function HtmlHelp(hwndCaller:HWND;strFile:String; uCommand:UINT; dwData:DWORD_PTR ):HWND; var LFileName:String; p:PChar; begin if HHControlInstance=0 then begin LFileName := StringOfChar( ' ', 256); p := PChar( LFilename ); GetSystemDirectory(p,255); StrCat(p,'\HHCTRL.OCX'); HHControlInstance := LoadLibrary( P ); if HHControlInstance = 0 then raise exception.Create('Help system not installed!'#13' HTMLHELP cannot displayed!'); @HtmlHelpA := GetProcAddress( HHControlInstance, 'HtmlHelpA'); if @HtmlHelpA = nil then raise exception.Create('Function HTMLHELP cannot loaded!'); HtmlHelpA( 0, nil,$001C , (@dwCookie)); end; result := HtmlHelpA( hwndCaller, PChar( strFile ), uCommand, dwData ); end; procedure CloseHtmlHelp; begin if HHControlInstance<>0 then begin HtmlHelpA( 0, nil, $001D, DWORD_PTR(dwCookie)); FreeLibrary(HHControlInstance); end; end; end. 两个函数分别初始化和释放调用接口。其它模块只须按约定调用即可。例如: HtmlHelp( handle, htmlhelpfilename+'::/welcome.htm',$0000, nil); 显示htmlhelpfilename对应的帮助文件的welcome页面。 上下文敏感帮助需要借用Delphi对WinHelp的支持。当用户按 F1 键时,程序将自动触发OnHelp事件,截获它,编写自己的处理代码即可。 ... ... Application.HelpFile := htmlhelpfilename; tmpOnHelp := Application.OnHelp; Application.OnHelp := AppHtmlHelp; ... ... function TForm1.AppHtmlHelp(Command: Word; Data: Longint; var CallHelp: Boolean): Boolean; var ret:integer;Hfile:string; begin if not CallHelp then exit; AppPath := ExtractFilePath(Application.ExeName); Hfile := AppPath + Application.HelpFile; case Command of HELP_FINDER, HELP_CONTENTS: ret := HtmlHelp(handle, pchar(Hfile), $0001, nil); HELP_QUIT: ret := HtmlHelp(0, '', $0012, nil); HELP_CONTEXT: ret := HtmlHelp(handle, pchar(Hfile), $000f, DWORD_PTR(data)); end; result:=ret<>0; CallHelp := False; end; 这样,我们就有另一种方法调用帮助文件,与传统WinHelp调用方法一样: application.helpcommand(HELP_FINDER, 0); application.helpcommand(HELP_quit, 0); ... ... 以上代码用Delphi5企业版开发,在大型应用中运行良好。抛砖引玉,与大家共享 #define HH_HELP_CONTEXT 0x000F //定义常量;HINSTANCE hs; //定义DLL实例变量hs = LoadLibrary("hhctrl.ocx"); //载八动态连接库HHelp = (Dll_HtmlHelp*)GetProcAddress(hs,"HtmlHelpA"); //对函数变量赋值HtmlHelpA()char * FileName = "WB.CHM"; //帮助文件名(*HHelp)(Application->Handle,FileName,HH_HELP_CONTEXT,1);调用帮助文件context为1(*HHelp)(Application->Handle,FileName,HH_CLOSE_ALL,NULL);//关闭帮助文件 这是使用CB写的。稍改就可以在DELPHI上运行。 你有email吗?我发一例子程序给你吧。 试一下:UNIN:ShellAPIfunction:ShellExecute(HWAND hwand, //父窗体句柄 LPCTSTR lpOperation, //操作方式 LPCTSTR lpFile, //指向的文件 LPCTSTR liParameters, //指向的文件的参数 LPCTSTR lpDirectory, //指向的文件的目录 INT nShowCmd //运行时打开方式 );Example: ShellExecute(handle,nil,pchar('Dfdd.exe'),nil,'G:\Program Files\Dfkc3000',sw_ShowNormal); ShellExecute(handle,nil,pchar('telnet:bbs.tsinghua.edu.cn'),nil,nil,sw_ShowNormal); ShellExecute(handle,nil,pchar('www.263.net'),nil,nil,sw_ShowNormal); 注意:一定要在use里面加上 ShellAPI Package 'rtl' already contains unit 'ScktComp' Inno Setup code段中如何将10进制转化为16进制? 问一个关于ADO access和XML比较的问题 为什么我可以添加数据,而不能更新呢? 急!如何用程序实现网站的用户登录(PHP文件) 请问如何得到在系统中注册的,各种文件类型对应的图标 求一个三层开发的实例 为什么 Delphi 仍有很好的未来? 推荐一个网上买书的好地方! Kylix出来了,我英文不好,Borland的主页看不了几行! 初学高分求一简单问题? 打印机没有汉字库,怎么处理?
'::/网页所在目录/网页文件名.htm':网页被编译到chm文件时相对于工程文件的所在路径和该网页的文件名。
function HtmlHelp(hwndCaller: HWND; pszFile: PChar; uCommand: Integer;
dwData: DWORD): HWND; stdcall; external 'hhctrl.ocx' name 'HtmlHelpA';就OK了。
var
PathHelpFile:string;
begin
PathHelpFile := 'hh.exe D:\COSTING\costing.chm';
if Winexec(Pchar(PathHelpFile), sw_normal) < 31 then
DJShow(CON_NO_FIND_APP); //自定義未找到顯示對話框
end;procedure TMainForm.btnHelpClick(Sender: TObject);
begin
AboutSystem; //調用
end;在工程單元
Application.Initialize;
加入代碼:
Application.HelpFile := 'D:\COSTING\costing.chm';
//指定幫助文件位置
公共模块代码如下:
unit HTMLHELPCOMMON
interface
uses Windows;
type
DWORD_PTR = ^DWORD;
Function
HtmlHelp(hwndCaller:HWND;strFile:String;
uCommand:UINT; dwData:DWORD_PTR ):HWND;
procedure CloseHtmlHelp;
implementation
uses
SysUtils;
const
HHControlInstance:THandle=0;
dwCookie :DWORD = 0;
var
HtmlHelpA:function ( hwndCaller:HWND; pszFile:PChar ;
uCommand:UINT; dwData:DWORD_PTR ):HWND;stdcall;
function HtmlHelp(hwndCaller:HWND;strFile:String;
uCommand:UINT; dwData:DWORD_PTR ):HWND;
var
LFileName:String;
p:PChar;
begin
if HHControlInstance=0 then
begin
LFileName := StringOfChar( ' ', 256);
p := PChar( LFilename );
GetSystemDirectory(p,255);
StrCat(p,'\HHCTRL.OCX');
HHControlInstance := LoadLibrary( P );
if HHControlInstance = 0 then
raise exception.Create('Help system not installed!'#13' HTMLHELP cannot displayed!');
@HtmlHelpA := GetProcAddress( HHControlInstance, 'HtmlHelpA');
if @HtmlHelpA = nil then
raise exception.Create('Function HTMLHELP cannot loaded!');
HtmlHelpA( 0, nil,$001C , (@dwCookie));
end;
result := HtmlHelpA( hwndCaller, PChar( strFile ), uCommand, dwData );
end;
procedure CloseHtmlHelp;
begin
if HHControlInstance<>0 then
begin
HtmlHelpA( 0, nil, $001D, DWORD_PTR(dwCookie));
FreeLibrary(HHControlInstance);
end;
end;
end.
两个函数分别初始化和释放调用接口。其它模块只须按约定调用即可。例如:
HtmlHelp( handle, htmlhelpfilename+'::/welcome.htm',$0000, nil);
显示htmlhelpfilename对应的帮助文件的welcome页面。
上下文敏感帮助需要借用Delphi对WinHelp的支持。当用户按 F1 键时,程序将自动触发OnHelp事件,截获它,编写自己的处理代码即可。
... ...
Application.HelpFile := htmlhelpfilename;
tmpOnHelp := Application.OnHelp;
Application.OnHelp := AppHtmlHelp;
... ...
function TForm1.AppHtmlHelp(Command: Word; Data: Longint;
var CallHelp: Boolean): Boolean;
var ret:integer;Hfile:string;
begin
if not CallHelp then exit;
AppPath := ExtractFilePath(Application.ExeName);
Hfile := AppPath + Application.HelpFile;
case Command of
HELP_FINDER, HELP_CONTENTS:
ret := HtmlHelp(handle, pchar(Hfile), $0001, nil);
HELP_QUIT:
ret := HtmlHelp(0, '', $0012, nil);
HELP_CONTEXT:
ret := HtmlHelp(handle, pchar(Hfile), $000f, DWORD_PTR(data));
end;
result:=ret<>0;
CallHelp := False;
end;
这样,我们就有另一种方法调用帮助文件,与传统WinHelp调用方法一样:
application.helpcommand(HELP_FINDER, 0);
application.helpcommand(HELP_quit, 0);
... ...
以上代码用Delphi5企业版开发,在大型应用中运行良好。抛砖引玉,与大家共享
hs = LoadLibrary("hhctrl.ocx"); //载八动态连接库
HHelp = (Dll_HtmlHelp*)GetProcAddress(hs,"HtmlHelpA"); //对函数变量赋值HtmlHelpA()
char * FileName = "WB.CHM"; //帮助文件名
(*HHelp)(Application->Handle,FileName,HH_HELP_CONTEXT,1);调用帮助文件context为1
(*HHelp)(Application->Handle,FileName,HH_CLOSE_ALL,NULL);//关闭帮助文件
UNIN:ShellAPI
function:ShellExecute(HWAND hwand, //父窗体句柄
LPCTSTR lpOperation, //操作方式
LPCTSTR lpFile, //指向的文件
LPCTSTR liParameters, //指向的文件的参数
LPCTSTR lpDirectory, //指向的文件的目录
INT nShowCmd //运行时打开方式
);
Example:
ShellExecute(handle,nil,pchar('Dfdd.exe'),nil,'G:\Program Files\Dfkc3000',sw_ShowNormal); ShellExecute(handle,nil,pchar('telnet:bbs.tsinghua.edu.cn'),nil,nil,sw_ShowNormal); ShellExecute(handle,nil,pchar('www.263.net'),nil,nil,sw_ShowNormal); 注意:一定要在use里面加上 ShellAPI