利用OnHelp( )在BCB中实现上下文敏感的html help
2001-11-19 20:48
393 查看
关于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为其它值的情况,可根据需要加上。
假定程序的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为其它值的情况,可根据需要加上。
相关文章推荐
- 利用js和html实现表单操作(onsubmit、onclick、submit等方法的异同)
- 一个PDF合并操作实现类,利用iTextSharp控件实现(http://www.diybl.com/course/4_webprogram/asp.net/asp_netxl/2008109/149644.html)
- java利用htmlparser获取html中想要的代码具体实现
- html中利用javascript实现文本框字数的动态计算
- html中利用js实现简单图片轮换效果
- C# 利用NPOI 实现Excel转html
- 利用js制作html table分页示例(js实现分页)
- Html利用锚点标记代替iframe实现页面无刷新加载
- 利用 TensorFlow 实现上下文的 Chat-bots
- 利用performSelectorInBackground和performSelectorOnMainThread实现多线程
- Android 中的service 实现之 利用onStart方式
- 利用lodop打印控件轻松实现批量打印 (转载http://www.thinkphp.cn/topic/13085.html)
- Android自定义控件系列八:详解onMeasure()(二)--利用onMeasure测量来实现图片拉伸永不变形,解决屏幕适配问题
- Blue-Green Deployments on Cloud Foundry (利用CloudFoundry实现蓝绿发布)
- 利用HTML和CSS实现常见的布局
- [置顶] 在HTML表单中利用JavaScript实现图片上传的前端校验
- Android之利用JSBridge库实现Html,JavaScript与Android的所有交互
- 前台html页面利用Juqery实现取色
- wordpress在IIS下无rewrite利用cos-html-cache实现静态页面
- 利用 TensorFlow 实现上下文的 Chat-bots