利用OnHelp( )在BCB中实现上下文敏感的html help

王朝html/css/js·作者佚名  2006-01-08
宽屏版  字体: |||超大  

关于Html Help,在CSDN上推荐得最多的是如何利用ShellExecute( )或HtmlHelp( )来打开相应的帮助文件和帮助主题。本人在查找了一些资料后试验成功一种在BCB中简单易行的显示上下文敏感的Html Help的方法,其效果和旧式的上下文敏感的WinHelp( )完全相同。这种方法的代码量小,而且可扩展性好,当你以后在帮助文件中增加主题时根本不需要再改动你的代码,只需要修改chm文件和窗体上各控件的HelpContext属性值即可。

假定程序的chm帮助文件中有三个主题文件1.htm、2.htm、3.htm,窗体上有3个TEdit控件,要达到的目的为:

当在第一个TEdit控件上按F1键时显示1.htm的内容,在第二个TEdit控件上按F1键时显示2.htm的内容,依次类推。这就是所谓的上下文敏感帮助。

当然你可以通过截获F1键并判断当前是哪个TEdit控件拥有输入焦点,从而调用ShellExecute( )或HtmlHelp( )来显示相应的html主题。但这种方法可扩展性不好,以后增加html文件时需要修改程序代码。

做法如下:

1、用文本编辑器直接编辑html help的project文件*.hhp,加入下面的内容。也可以通过html help workshop的界面加入。这相当于将3个html文件映射为3个context ID。之后重新编译你的project。

[ALIAS]

IDH_CHAPTER1 = 1.htm

IDH_CHAPTER2 = 2.htm

IDH_CHAPTER3 = 3.htm

[MAP]

#define IDH_CHAPTER1 1001

#define IDH_CHAPTER2 1002

#define IDH_CHAPTER3 1003

2、设置窗体上的3个TEdit控件的HelpContext属性分别为1001、1002、1003。

3、修改程序代码,重载TApplication->OnHelp(当然也可以重载各Form的OnHelp),利用HtmlHelp( )来显示相应的上下文敏感帮助。当Command取值为HELP_CONTEXT时,Data就是你按F1键时拥有输入焦点的那个控件的HelpContext属性值。

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

Application->HelpFile = "Main.chm";

Application->OnHelp = AppHelp;

}

//--------------------------------------------------------------------------

bool __fastcall TForm1::AppHelp(Word Command, int Data, bool &CallHelp)

{

switch(Command)

{

case HELP_CONTEXT:

HtmlHelp(GetDesktopWindow(), Application->HelpFile.c_str( ), HH_HELP_CONTEXT, Data);

CallHelp = false;

break;

default:

CallHelp = true;

}

return true;

}

//--------------------------------------------------------------------------

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)

{

HtmlHelp(NULL, NULL, HH_CLOSE_ALL, 0);

}

//---------------------------------------------------------------------------

这样就Ok了。上述没有保存Application->OnHelp的旧值,也没有处理Command为其它值的情况,可根据需要加上。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有