CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C++ Builder >  基础类

bcb6中调用.chm格式帮助文件,利用控件的HelpContext属性值为什么不灵呢?

楼主suntonycomm(太阳花)2005-12-13 09:10:36 在 C++ Builder / 基础类 提问

 
  参考文章也没有能实现。请有经验的大侠指点一下!谢谢  
  感觉用HelpContext属性这种方式比较简单易用。  
   
  补充:按F1后显示“无效的文件格式或文件损坏”  
   
   
  文章:  
  --------------------------------------------------------  
  关于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为其它值的情况,可根据需要加上。  
   
   
  问题点数:100、回复次数:3Top

1 楼constantine(飘遥的安吉儿)回复于 2005-12-13 09:41:52 得分 50

http://www.ccrun.com/article/go.asp?i=624&d=a15f8r  
  看看这个文章是不是对你有帮助Top

2 楼ccrun(老妖)(www.ccrun.com)回复于 2005-12-13 09:52:24 得分 50

恩。看看逸飞那篇文档吧。写的很详细了。Top

3 楼suntonycomm(太阳花)回复于 2005-12-15 09:19:39 得分 0

问题已经OK.  
   
   
  谢谢Top

相关问题

  • 怎样调用chm?
  • 调用*.chm时不执行
  • vc调用chm文件
  • 怎样调用.chm文件?
  • 怎样调用CHM文件
  • pb6.5如何调用*.chm帮助??!!!
  • 在vb中,如何调用chm文件。
  • 关于chm文件的调用?
  • delphi怎么调用CHM文件啊?
  • 如何调用chm帮助文件?

关键词

  • 控件
  • 文件
  • 属性
  • 代码
  • 主题
  • 修改
  • f1键
  • helpcontext属性
  • tedit控件
  • htmlhelp

得分解答快速导航

  • 帖主:suntonycomm
  • constantine
  • ccrun

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo