DELPHI中的帮助文件能用.chm格式的吗?(100分)

  • 主题发起人 bluesky1000
  • 开始时间
B

bluesky1000

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大大,我是个初学DELPHI的新手,刚刚做了个小程序,用到了一个帮助文件,
加了一个BUTTON后,代码我是这样写的:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
Application.HelpFile := 'c:/winnt/123.hlp';
Application.HelpCommand(HELP_FINDER, 0);
end;
这样运行成功。后来我用了.chm格式的帮助文件却不行了,说这不是WINDOWS的帮助文件,
或文件已坏。但文件是好的啊?

请问各位大大,有什么方法能让DELPHI可以调用.chm格式的帮助文件吗?

不胜感激!

 
关注
我也遇到同样的问题
 
有两种方法。
1)使用ACTiveX控件。在WINDOW98系统盘的windows/SYStem/hhopen.ocx
安装。至于怎么安装:菜单 component->Import ActiveX Control..
2)用API函数:例:
var
str,filename:string;
pp:pchar ;
begin
filename:='E:/Documents and Settings/Administrator/桌面/bughelp.chm' ;
str:='hh.exe '+filename;
pp:=pchar(str) ;
WinExec(pp,SW_SHOW);

 
uses ShellApi;

ShellExecute(handle, 'open',PChar('*.chm'),nil, nil, sw_ShowNormal);
 
怎樣讓chm文件跳到自己所要的幫助處呢

上面的兩種方法只是打開chm文件而已
 
楼上:使用ACTiveX控件可以啊。
 
当然可以。
 
uses ShellApi;

ShellExecute(handle, 'open',PChar('文件检索帮助.chm::/Html/检索.htm'),nil, nil, sw_ShowNormal);


这样没问题的,OK!
 
搜索以前的帖子,发现(应该是不错的):

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.

调用:

function TMainForm.AppHtmlHelp(Command: Word; Data: Longint;
var CallHelp: Boolean): Boolean;
var
ret:integer;
Hfile,AppPath:string;
begin

if not CallHelp then exit;
AppPath := ExtractFilePath(Application.ExeName);
Hfile := Application.HelpFile;
case Command of
HELP_FINDER, HELP_CONTENTS:
ret := HtmlHelp(application.handle, pchar(Hfile), $0001, nil);
//HELP_QUIT:
//ret := HtmlHelp(application.handle, '', $0012, nil);
HELP_CONTEXT:
ret := HtmlHelp(application.handle, pchar(Hfile), $000f, DWORD_PTR(data)); //Data:HelpContext的值
end;
result:=ret<>0;
CallHelp := False;

end;


procedure TMainForm.FormCreate(Sender: TObject);
var
HtmlHelpFileName:string;
begin
HtmlHelpFileName:=ExtractFilePath(Application.ExeName)+'ngmfhelp.chm';
Application.HelpFile := HtmlHelpFileName;
Application.OnHelp := AppHtmlHelp;

self.Brush.Bitmap:=image1.Picture.Bitmap;
end;
 
我看就 碧玉银淑 的方法不错,其他的方法都要装一个ocx,很不爽
 
你试试这个:http://www.ec-software.com/delphi/ehs.zip

一个DELPHI中帮助文件的完整解决,不管是Hlp还是CHM都能搞定。
而且使用CHM就和用HLP一样方便。

快试试吧。
 
谢谢大家,已经成功啦。哈哈哈哈[:D]
 
顶部