delphi自己也可以生成帮助文件

来源:互联网 发布:淘宝活动平台 编辑:程序博客网 时间:2024/05/01 06:09
以前做的帮助都是用第三方的工具做的,虽然功能强大而且容易上手,却不知道delphi自己也可以生成帮助文件,下面就是我摘录的相关资料。
      一个完善的Windows应用程序都具有方便快捷、内容详尽的帮助系统。特别是在应用程序的推广初期,良好的帮助系统会加快用户接受新软件的速度,并且减 少培训工作量。但是一个复杂完善的帮助系统需要花费大量的时间和精力,因此对于相对简单的应用程序只需要制作相对简单的帮助能满足用户需求即可。下面介绍 Delphi开发Windows应用程序时如何制作调用各种帮助及实现的方法。

一、使用帮助提示(Hint)制作简单即时的帮助

使用Windows应用程序,用户可以把鼠标置于程序的某个部件上,如按钮,工具栏等。鼠标在部件上停留超过一定时间后,应用程序将会显示一个弹出窗口,里面有部件名称和概述。这种帮助简单即时,特别适用于工具栏或按钮、输入框等可视控件较多的场合。

⒈利用Hint特性提供弹出式帮助

使用Delphi开发应用程序,只需设置Hint特性就可以实现帮助提示,下面看一下Hint特性是怎样声名的。
Hint特性
声明:property Hint: string;
说明:该特性用于设置帮助提示框中的文本字符串。
Hint 特性应用于所有控件,包括应用程序控件和菜单控件。因为应用程序部件不是可视部件,因此不能在Object Inspector窗口中定义Hint特性。但可以在定义可视控件的Hint特性时同时定义应用程序控件的Hint特性,定义时只需用“|”字符分开。关 于“|”字符的应用稍后再讨论,另外需要把应用程序的ShowHint特性设为True,把需要显示帮助提示的控件的ShowHint特性设为True, ParentShowHint特性设为False(这几项特性在下一节中讨论)。这样在程序运行时,只要把鼠标在需要帮助的控件上方停留500毫秒就会出 现在Hint特性中设定的提示信息。

⒉控制帮助提示的使用

帮助提示在应用程序的使用初期会带来很多方便,但是在使用了一 定时间后一旦用户掌握了有关常用控件的功能后,随着鼠标的移动反复提示帮助反而带来不方便,因此用户可能提出关闭部分常用控件提示功能或全部关闭。为此 Delphi提供了两个特性来让开发者和用户无论是在设计期间还是运行期间都可以灵活的开关帮助提示窗口。下面先看以下控制开关帮助提示的特性是如何声明 的。
ShowHint特性
声明:property ShowHint: Boolean;
说明:该特性为True时显示Hint特性中设置的提示信息,该特性为False时不显示提示信息。
ParentShowHint特性
声明:property ParentShowHint: Boolean;
说明:该特性为True时,该控件的ShowHint特性继承父控件的ShowHint特性,该特性为False时,该控件的ShowHint特性不受父控件ShowHint特性的影响。
从上面的声明可以看出这两个特性都是Boolean类型并不复杂,那么每个可视控件的帮助提示的显示与否跟其父类控件和应用程序又是什么关系呢?
ShowHint 特性可应用于所有的控件和应用程序(Application)控件,控件的ShowHint特性含义与应用程序的稍有不同。控件的ShowHint特性决 定某一控件是否显示帮助提示,如果ShowHint是真值,当用户把鼠标置于控件之上超过一定时间后,控件将出现帮助提示。如果是假值,则不出现提示。控 件是否显示还决定于控件的ParentShowHind特性。如果ParentShowHint是真值,控件的父类的ShowHint特性将决定控件是否 显示帮助提示。 假如有一个分组框和一个按钮,分组框是按钮的父件。下面的表说明了子件与父件的ShowHint,ParentShowHint特性设置对子件帮助提示的 影响。

分组框ShowHint 按钮ParentShowHint 按钮ShowHint 帮助提示
True False False False
True False True True
False False False False
False False True True
True True True True
False True False False

从 上表可以看出,当按钮ShowHint特性为True时显示帮助提示,按钮ShowHint特性为False时不显示帮助提示。当按钮 ParentShowHint特性为False时按钮ShowHint特性并不受分组框ShowHint特性的影响,按钮ParentShowHint特 性为True时按钮ShowHint特性必须与分组框ShowHint特性一致。
把控件的ShowHint特性设置成真值,系统自动将 ParentShowHint设置成假值。应用程序控件的ShowHint特性可以决定整个程序的帮助提示是否有效。如果应用程序的ShowHint特性 为真,程序中各控件的帮助提示才有效,但是否显示还要取决于部件的SHowHint,ParentShowHint及其父件的ShowHint特性,如果 应用程序的ShowHint特性为假值,无论程序部件的特性如何设置,程序中所有帮助提示都无效。
通过以上讨论可知只要在设计期间稍微注意一下, 无论是设计期间还是运行期间都可以很方便地控制帮助提示的开关,即在设计期间把所有控件的ShowHint和ParentShowHint的特性设置成 True。这样如果需要关闭所有的帮助提示时只需要把应用程序(Application)控件的ShowHint特性设置成False;如果需要把某一部 分的帮助提示关闭时,只需把父类控件的ShowHint特性设置成False;如果需要把某一个子控件的帮助提示时把该控件的ShowHint和 ParentShowHint的特性设置成False。

⒊简单控制帮助提示窗口部分属性

在默认情况下当用户把鼠标置于控 件之上500毫秒后弹出帮助提示信息窗口,过了2500毫秒以后自动关闭,如果已经弹出帮助提示窗口那么过了50毫秒以后才会再次弹出另一个帮助提示窗 口。另外帮助提示窗口的默认背景颜色是浅黄色(clInfoBk)。为了控制上述属性Delphi提供了四个特性来供开发者和用户设定,具体声明和说明如 下。
HintColor特性
声明:property HintColor: TColor;
说明:这个特性用于设置帮助提示窗口的背景颜色。
HintHidePause特性
声明:property HintHidePause: Integer;
说明:这个特性用于设置鼠标一直指在某个控件之上时,帮助提示窗口多少时间后自动关闭,默认时间是2500毫秒。
HintPause特性
声明:property HintPause: Integer;
说明:这个特性用于设置当用户把鼠标置于控件之上多少时间后弹出帮助提示信息窗口,默认时间是500毫秒。
HintShortPause特性
声明:property HintShortPause: Integer;
说明:这个特性用于设置如果已经弹出帮助提示窗口那么过了多少时间以后才会再次弹出另一个帮助提示窗口,默认时间是50毫秒。

⒋进一步控制帮助提示窗口属性

通过上面介绍的四个特性可以控制帮助提示窗口的部分属性,一方面可控制的属性有限,另一方面上述特性是针对所有控件的,无法控制某个单一的帮助提示窗口。如果需要控制更多的属性则需要响应应用程序的OnShowHint事件。OnShowHint事件的声明如下:
OnShowHint特性
声明:property OnShowHint: TShowHintEvent;
其中:
type TShowHintEvent = procedure (var HintStr: string; var CanShow: Boolean; var HintInfo: THintInfo) of object;
type
THintWindowClass = class of THintWindow;
THintInfo = record
HintControl: TControl;
HintWindowClass: THintWindowClass;
HintPos: TPoint;
HintMaxWidth: Integer;
HintColor: TColor;
CursorRect: TRect;
CursorPos: TPoint;
ReshowTimeout: Integer;
HideTimeout: Integer;
HintStr: string;
HintData: Pointer;
end;
说 明:当鼠标在一个控件上稍作停留,将弹出帮助提示窗口,并触发OnShowHind事件。在这个事件中HintStr参数是要提示的帮助字符串,响应这个 事件时可以调用GetLongHint或GetShortHint函数来调整显示内容。CanShow参数控制是否允许显示帮助提示,该参数设为 True,表示允许显示帮助提示,否则该参数设为False,表示不允许显示帮助提示。
HintInfo参数是一个记录类型,用于设置帮助提示窗 口的外观和动作属性。其中,HintControl字段是鼠标所指的控件;HintColor字段是帮助提示窗口的背景颜色;HintPos字段是帮助提 示窗口的左上角坐标;HintMaxWidth字段是帮助提示窗口的最大宽度,默认值是屏幕的宽度;CursorRect字段是鼠标所指的有效区域,默认 是鼠标所指控件的客户区;CursorPos字段是鼠标在控件客户区的位置;ReshowTimeout字段是两次弹出帮助提示窗口之间的时间间隔; HideTimeout字段是帮助提示窗口多少时间后自动关闭,默认是HintHidePause特性指定的时间;HintStr字段是要提示的帮助字符 串。
这样可以通过响应OnShowHind事件来进一步控制帮助提示窗口,主要是改变某些需要特殊强调的控件的帮助提示窗口的背景颜色和显示位置,时间等。

⒌利用OnHint事件,在状态条上显示帮助

帮助提示窗口虽然简单方便,但是一般只适用于较短的提示,对于较长的提示显得力不从心,因此Windows应用程序经常借助状态条显示帮助信息。要在状态条显示帮助信息需要响应应用程序的OnHint事件。OnHint事件的声明如下:
OnHint特性
声明:property OnHint: TNotifyEvent;
其中:type TNotifyEvent = procedure (Sender: TObject) of object;
说明:当鼠标在一个控件上稍作停留,并且该控件的Hint特性非空时触发OnHind事件。
讨 论OnHint事件之前先介绍一下控件的Hint特性和应用程序的hint特性。当OnHint事件触发后,控件的Hint特性中没有“|”字符时 Delphi把这个值同时赋给控件和应用程序控件的Hint特性。如果一个控件的Hint值包含了“|”字符时Delphi把Hint字符串中“|”字符 前面的字符串赋给控件的Hint特性,把“|”字符后面的字符串赋给应用程序控件的Hint特性。因此无法直接该应用程序的Hint特性赋值,另外如果应 用程序的ShowHint特性为假值或者控件的ShowHint特性为假值时,帮助提示将不显示,但可以利用程序控件的Hint特性通过其它控件,如状态 条等显示帮助提示。
OnHint事件是应用程序部件的事件,而应用程序部件是非可视部件,不能使用Object Inspector窗体定义事件,必须编写自己的OnHint事件。
首 先,在TForm1对象中宣称ShowHint方法,并在单元的implementation部分编写实现代码。在ShowHint方法中,把应用程序的 Hint特性赋给面板的标题。另一个重要问题是必须把ShowHint方法作为处理OnHint事件的方法。窗体的OnCreate事件的代码解决了这个 问题。
下面列出了程序的完整代码。当用户运行程序, 把鼠标置于菜单或部件之上,在窗体的状态条中将出现定义的提示。
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls;

type
TForm1 = class(TForm)
StatusBar1: TStatusBar;
procedure ShowHint(Sender: TObject); //这一行是手工加入的
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.ShowHint(Sender: TObject);
begin
StatusBar1.Panels[0].Text:= Application.Hint;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnHint := ShowHint;
end;

end.

二、使用hlp文件提供系统完善的帮助

使 用帮助提示窗口或状态栏只能提供简单、单一的帮助,无法对某一模块或应用程序整体提供系统的帮助,因此运行Windows应用程序,需要帮助时一般都可以 通过执行帮助菜单获得整个应用程序的帮助,也可以运行某一部分时单击帮助按钮或按“F1”键获得相关的帮助。Delphi应用程序能够方便地应用帮助系 统。下面介绍应用程序动态地运行帮助系统的方法。

⒈制作帮助文件

要在应用程序中使用帮助系统,必须有相应的帮助文件,因此首先要制作一个帮助文件。帮助文件的制作方法很多,如果没有制作工具可以使用Word编写,当然会麻烦一些,笔者使用的是Oasis SE(http://www.adept.co.za/~oasisdev),制作帮助文件简单方便。因为制作帮助文件不是本文的重点,不详细介绍制作过程。

⒉定义应用程序的帮助文件

有 了相应的帮助文件还要为应用程序定义帮助文件,以便在用户需要帮助时应用程序能打开相应的帮助文件。定义应用程序的帮助文件有两种方法,一是在 Delphi集成开发环境中选择“Options | Project”菜单项,系统弹出工程选择对话框,再选择Application Options页面,在辅助文件中输入帮助文件名。二是在主窗体的OnCreate事件中直接为应用程序(Application)的HelpFile特 性赋值。HelpFile特性的声明如下:
HelpFile特性
声明:property Helpfile: string;
说明:这个特性记载帮助文件的名字,可以在运行期间设置,也可以在设计期间设置。

⒊通过功能键F1调用帮助文件

Windows 应用程序经常通过功能键F1提供帮助,当程序运行到某一部分需要帮助时,只要按F1键就会弹出跟当前输入焦点控件相关主题的帮助文件。Delphi开发的 应用程序若要提供这种功能只需要设置HelpContext特性。HelpContext特性的声明如下:
HelpContext特性
声明:property HelpContext: THelpContext;
其中:type THelpContext = -MaxLongInt..MaxLongInt;
说明:这个特性用于设置帮助文件中用于识别主题的上下文编号,若该参数为0则不调用帮助文件。

⒋通过菜单调用帮助文件

除了功能键F1以外windows应用程序还可以通过菜单、工具栏、按钮等调用帮助文件,delphi开发的应用程序提供这类功能时可以调用应用程序控件(Application)的三个函数来实现,下面是调用帮助文件的三个函数的声明以及使用方法。
HelpContext函数
声明:function HelpContext(Context: THelpContext): Boolean;
其中:type THelpContext = -MaxLongInt..MaxLongInt;
说明:函数调用Windows的WinHelp函数,Context参数是帮助文件的上下文编号。如果HelpFile特性是空字符,这个函数返回假值,其它情况均返回真值。
HelpJump函数
声明:function HelpJump(const JumpID: string): Boolean;
说明:函数调用Windows的WinHelp函数,JumpID参数是帮助文件中唯一辨识帮助主题的字符串。如果HelpFile特性是空字符,这个函数返回假值,其它情况均返回真值。
以上两个函数一般可用于响应工具栏或按钮的onClick事件,显示相关主题内容。
HelpCommand函数
声明:function HelpCommand(Command: Word; Data: Longint): Boolean;
说明:函数调用Windows的WinHelp函数,Command参数指定命令的种类,Data参数跟Command参数有关。如果HelpFile特性是空字符,这个函数返回假值,其它情况均返回真值。
关于Command参数指定的命令种类请参考Windows的WinHelp函数,下面仅列出常用的命令。
命令:HELP_FINDER
含义:显示帮助的主题,索引窗口。
Data:忽略,一般是0
命令:HELP_CONTEXT
含义:显示指定主题的帮助内容。
Data:无符号的长整形,帮助文件的上下文编号。
命令:HELP_HELPONHELP
含义:显示Windows系统的介绍帮助文件使用方法的帮助。
Data:忽略,一般是0
命令:HELP_QUIT
含义:关闭帮助文件。
Data:忽略,一般是0
命令:HELP_PARTIALKEY
含义:显示指定关键字的帮助内容
Data:关键字的地址。
HelpCommand函数主要用于响应菜单、工具栏、按钮的onClick事件,它可以完成HelpContext和HelpJump函数的所有功能。另外调用这三个函数时触发应用程序控件(Application)的OnHelp事件。

⒌通用对话框中使用帮助系统

Delphi提供的通用对话框中都能显示一个帮助按钮。如果程序显示了对话框中的帮助按钮,应该确保应用程序的帮助文件中有相应的主题。
在通用对话框中使用帮助系统,要做到以下三点:
①把对话框的Option|ShowHelp特性设置成True,这样在程序运行时将出现帮助按钮。其中ShowHelp特性与其控件的名字相关,例如字体对话框的ShowHelp特性称为fdShowHelp。
②为对话框控件的HelpContext特性设置帮助文件的上下文编号。
③定义应用程序的帮助文件名。

三、超文本(html)帮助的应用
超文本是目前常见的文件格式之一,许多产品的说明书、使用帮助也都采用了这种格式。Delphi处理html文件有很多方式,也很方便稍加改进就可以编写出跟调用hlp文件一样灵活的帮助系统。

⒈制作超文本帮助文件

制作超文本的工具很多,这里不做详细的说明,只是对制作的超文本文件提出如下要求:
首先超文本帮助文件由一个目录html文件和多个html文件组成,一个主题对应一个html文件(Topic.HTM),每个主题下的关键字对应HTML文件中的一个标签(#Item)。这样在我们的可以很快找到需要的帮助内容。
其次除非把帮助文件放在Web服务器上,否则超文本帮助文件不应该包括必须由Web服务器处理的内容。

⒉直接调用默认浏览器显示超文本帮助

如果客户的操作系统安装了浏览器,就可以通过Windows的ShellExecute函数调用操作系统默认的浏览器显示超文本帮助。关于ShellExecute函数的详细说明请参照Delphi的帮助,下面只列出了调用超文本文件的方法。
ShellExecute(Application.Handle,nil,URL,nil,nil,SW_SHOWNORMAL);

⒊使用TWebBrowser控件显示超文本帮助

Delphi5.0的Internet构件板上有一个TWebBrowser控件,使用这个控件可以很容易处理html文件,还可以调用显示你自己的主页。如果你使用Delphi3.0或Delphi4.0,请按如下方法手工安装。
在“Components” 菜单中,调用“Import ActiveX Control”功能,在Registered Controls (注册控件)列表中选择“Microsoft Internet Controls(Version1.1)”,下方的提示栏中显示出其路径为C:/PWin98/System/SHDOCVW.DLL,在Class Names(类型列表)中列出了可注册的三个控件: TWebBrowser_V1、TWebBrowser和TShellFolderViewOC,分别为IE3浏览器控件、IE4浏览器控件和 “Microsoft外壳文件夹查看路由器”控件。单击Install进行安装。安装完成后,在“ActiveX” 控件栏中,将增加三个控件,分别为TWebBrowser_V1、TWebBrowser和TshellFolderViewOC。
通过TWebBrowser控件可以实现IE浏览器的大部分功能,TWebBrowser控件的特性、方法和事件很多,在这里并不一一介绍,只介绍最简单的超文本调用方法。通过TWebBrowser控件显示超文本只需调用Navigate过程。
Navigate过程
声明:procedure Navigate(const URL: WideString); overload;
说明:这个过程用于显示URL参数指定的超文本文件,URL参数可以是远程的Web服务器地址,也可以是包括完整路径的超文本文件名。

⒋通过功能键F1调用超文本帮助文件

Delphi 开发的应用程序使用hlp帮助文件时,只需要设置HelpContext特性就可以响应功能键F1,那么使用超文本帮助文件时是否可以继续使用 HelpContext特性响应功能键F1呢?,答案时肯定的但是需要做一些工作响应应用程序控件(Application)的OnHelp事件。下面先 看以下OnHelp事件的原型。
OnHelp事件
声明:property OnHelp: THelpEvent;
其中:type THelpEvent = function (Command: Word; Data: Longint; var CallHelp: Boolean): Boolean of object;
说 明:当拥有输入焦点的HelpContext特性不等于0时若用户按下了功能键F1或调用了HelpContext、HelpJump和 HelpCommand等三个函数将触发该事件。其中Command参数返回命令的类型,Data参数返回HelpContext特性值, CallHelp参数用于设定是否显示帮助。
OnHelp事件的原型中可以看出只要在OnHelp事件中读出Data参数,就可以知道用户在哪个控件上按下了功能键F1,需要帮助的主题代码是什么。因此只要响应OnHelp事件,根据Data参数通过TWebBrowser控件显示出指定的超文本帮助就可以了。

五、结论

通过Delphi开发的应用程序制作帮助提示,调用hlp帮助文件和html帮助文件的过程可以看出,利用delphi开发工具很容易开发出可以满足不同要求的简单或复杂的帮助系统,影响开发帮助系统的瓶颈不再是如何调用帮助,而是如何制作帮助文件本身了。
以上介绍的内容是在Windows98+Delphi5.0下完成的。

原创粉丝点击