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

原创 2001年11月19日 20:48:00

关于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为其它值的情况,可根据需要加上。

用WebBrowser实现HTML界面的应用和交互

unit Unit1; interface uses   Winapi.Windows, Winapi.Messages, System.SysUtils, System.Var...
  • liwb1987
  • liwb1987
  • 2014年08月28日 13:16
  • 499

BCB如何加载字符串资源文件(语言资源文件)?

如何在软件.exe中嵌入语言资源呢。常规的想法是, 将语言字符串放到一个文件中, 然后在程序中去读取。 然而这样做存在一个问题: 最后发布的.exe必须依赖于语言字符串文件, 比如lang.txt. ...
  • stpeace
  • stpeace
  • 2015年07月26日 12:45
  • 1585

使用HTML HELP WORKSHOP制作CHM帮助文档

 制作chm电子书完美详解   2 3 4 5 6 7 分步阅读 Microsoft开发的制...
  • alzhuzhu
  • alzhuzhu
  • 2014年06月08日 17:53
  • 1742

Eclipse 插件向导实现自定义帮助功能(也称为上下文敏感的帮助支持)

文章转载自IBM 文档社区 原文地址:https://www.ibm.com/developerworks/cn/opensource/os-cn-rcp-contexthelp/ ...
  • Mrzhang0419
  • Mrzhang0419
  • 2017年03月29日 11:02
  • 425

作用域--------上下文环境

除了全局作用域外,每个函数还能创建自己的作用域。作用域在函数定义时就已经确定了。而不是在函数调用时确定。 现在讲作用域和上下文环境放在一起,有助于了解作用域。var a = 10; var b = ...
  • cindy_rain
  • cindy_rain
  • 2016年02月25日 20:49
  • 590

python 敏感词过滤

敏感词过滤的经典算法DFA ,做了评估实验 先上代码 [python] view plain copy #!/usr/bin/python2.6   ...
  • isoleo
  • isoleo
  • 2017年05月17日 14:14
  • 942

spring上下文,spring mvc上下文,以及servlet上下文的关联以及理解

前言对于spring的学习来说,这三个上下文重要性不言而瑜,特别在java web的应用上,这三者的关系和运用,在这里探讨一下(水平有限,主要还理解概念上) 一、ServletContext ht...
  • afzaici
  • afzaici
  • 2017年05月16日 21:18
  • 1182

用BCB控件编写TCP/IP通讯程序的基础知识

最近在网上不断的看到有人问如何用BCB的TServerSocket和TClientSocket进行编程的问题,所以决定把我的一些编程经验告诉给大家,让大家能够尽快的掌握他们的用法。 首先要讲一下他们...
  • lixingshi
  • lixingshi
  • 2014年11月25日 15:26
  • 1178

BCB 动态生成控件

窗体上的所有对象与窗体本身都成为一个类:TForm1,我们就是将类成员与类成员函数写到TForm1类中,程序运行时,实际上就是通过TForm1 类生成Form1对象, 所以,Unit1.cpp...
  • u014438664
  • u014438664
  • 2015年03月29日 23:46
  • 494

常用的BCB 函数

文件: ActnList  CreateAction 函数 创建一个指定类型的Action,显示在action list editor中。  EnumRegisteredAction 过程 枚举已...
  • binnygoal
  • binnygoal
  • 2016年09月08日 16:17
  • 1242
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:利用OnHelp( )在BCB中实现上下文敏感的html help
举报原因:
原因补充:

(最多只允许输入30个字)