使用Windows应用程序,用户可以把鼠标置于程序的某个部件上,如按钮,工具栏等。鼠标在部件上
停留超过一定时间后,应用程序将会显示一个弹出窗口,里面有部件名称和概述。这种帮助简单即时,特别适
用于工具栏或按钮、输入框等可视控件较多的场合。
1、利用Hint特性提供弹出式帮助
property Hint: string;该特性用于设置帮助提示框中的文本字符串。Hint特性应用于所有控件,包
括应用程序控件和菜单控件。因为应用程序部件不是可视部件,因此不能在Object Inspector窗口中定义Hint
特性。但可以在定义可视控件的Hint特性时同时定义应用程序控件的Hint特性,定义时只需用“|”字符分开。
另外需要把应用程序的ShowHint特性设为True,把需要显示帮助提示的控件的ShowHint特性设为True,Parent
ShowHint特性设为False。这样在程序运行时,只要把鼠标在需要帮助的控件上方停留500毫秒就会出现在Hint
特性中设定的提示信息。
2、控制提示窗口的开关
帮助提示在应用程序的使用初期会带来很多方便,但是在使用了一定时间后一旦用户掌握了有关常用
控件的功能后,随着鼠标的移动反复提示帮助反而带来不方便,因此用户可能提出关闭部分常用控件提示功能
或全部关闭。为此Delphi提供了两个特性来让开发者和用户无论是在设计期间还是运行期间都可以灵活的开关
帮助提示窗口。下面先看以下控制开关帮助提示的特性是如何声明的。
ShowHint特性:
property ShowHint: Boolean;该特性为True时显示Hint特性中设置的提示信息,该特性为False时不显
示提示信息。
ParentShowHint特性:
property ParentShowHint: Boolean;该特性为True时,该控件的ShowHint特性继承父控件的ShowHint
特性,该ParentShowHint为False时,该控件的ShowHint特性不受父控件ShowHint特性的影响。
所以当按钮ShowHint特性为True时显示帮助提示,按钮ShowHint特性为False时不显示帮助提示。
当按钮ParentShowHint特性为False时按钮ShowHint特性并不受父组件的ShowHint特性的影响,按钮Parent
ShowHint特性为True时按钮ShowHint特性必须与父组件的ShowHint特性一致。把控件的ShowHint特性设置
成真值,系统自动将ParentShowHint设置成假值。应用程序控件的ShowHint特性可以决定整个程序的帮助提
示是否有效。如果应用程序的ShowHint特性为真,程序中各控件的帮助提示才有效,但是否显示还要取决于部
件的SHowHint,ParentShowHint及其父件的ShowHint特性,如果应用程序的ShowHint特性为假值,无论程序
部件的特性如何设置,程序中所有帮助提示都无效。
3、控制提示窗口的简单属性
在默认情况下当用户把鼠标置于控件之上500毫秒后弹出帮助提示信息窗口,过了2500毫秒以后自动
关闭,如果已经弹出帮助提示窗口那么过了50毫秒以后才会再次弹出另一个帮助提示窗口。另外帮助提示窗口
的默认背景颜色是浅黄色(clInfoBk)。为了控制上述属性Delphi提供了四个特性来供开发者和用户设定,具
体声明和说明如下。
HintColor特性:
property HintColor: TColor;这个特性用于设置帮助提示窗口的背景颜色。
HintHidePause特性:
property HintHidePause: Integer;这个特性用于设置鼠标一直指在某个控件之上时,帮助提示窗口多少
时间后自动关闭,默认时间是2500毫秒。
HintPause特性:
property HintPause: Integer;这个特性用于设置当用户把鼠标置于控件之上多少时间后弹出帮助提示信
息窗口,默认时间是500毫秒。
HintShortPause特性:
property HintShortPause: Integer;这个特性用于设置如果已经弹出帮助提示窗口那么过了多少时间以后
才会再次弹出另一个帮助提示窗口,默认时间是50毫秒。
4、控制提示窗口的复杂属性
通过上面介绍的四个特性可以控制帮助提示窗口的部分属性,一方面可控制的属性有限,另一方面上
述特性是针对所有控件的,无法控制某个单一的帮助提示窗口。如果需要控制更多的属性则需要响应应用程序
的OnShowHint事件。当鼠标在一个控件上稍作停留,将弹出帮助提示窗口,并触发OnShowHind事件, 通过响
应OnShowHind事件来进一步控制帮助提示窗口,主要是改变某些需要特殊强调的控件的帮助提示窗口的背景颜
色和显示位置,时间等。OnShowHint事件的声明如下:
OnShowHint特性
property OnShowHint: TShowHintEvent;
// TShowHintEvent = procedure (var HintStr: string; var CanShow: Boolean; var HintInfo: THintInfo) of object;
HintStr:要提示的帮助字符串,响应这个事件时可以调用GetLongHint或GetShortHint函数来调整显示内容。
CanShow:控制是否允许显示帮助提示,该参数设为True,表示允许显示帮助提示,否则表示不允许。
HintInfo:参数是一个记录类型,用于设置帮助提示窗口的外观和动作属性。
THintWindowClass = class of THintWindow;
THintInfo = record
HintControl: TControl; // 是鼠标所指的控件
HintWindowClass: THintWindowClass;
HintPos: TPoint; // 是帮助提示窗口的左上角坐标
HintMaxWidth: Integer; // 是帮助提示窗口的最大宽度, 默认值是屏幕的宽度
HintColor: TColor; // 是帮助提示窗口的背景颜色
CursorRect: TRect; // 是鼠标所指的有效区域,默认是鼠标所指控件的客户区
CursorPos: TPoint; // 是鼠标在控件客户区的位置
ReshowTimeout: Integer; // 是两次弹出帮助提示窗口之间的时间间隔
HideTimeout: Integer; // 是帮助提示窗口多少时间后自动关闭, 默认是HintHidePause特性指定的时间
HintStr: string; //是要提示的帮助字符串。
HintData: Pointer;
end;
5、控件的Hint特性和应用程序的hint特性的联系与区别
当鼠标在一个控件上稍作停留,并且该控件的Hint特性非空时触发OnHint事件。OnHint事件是应用
程序部件的事件,而应用程序部件是非可视部件,不能使用Object Inspector窗体定义事件,必须编写自己的
OnHint事件。当OnHint事件触发后,控件的Hint特性中没有“|”字符时Delphi把这个值同时赋给控件和应用
程序控件的Hint特性。如果一个控件的Hint值包含了“|”字符时Delphi把Hint字符串中“|”字符前面的字符
串赋给控件的Hint特性,把“|”字符后面的字符串赋给应用程序控件的Hint特性。因此无法直接给该应用程序
的Hint特性赋值,另外如果应用程序的ShowHint特性为假值或者控件的ShowHint特性为假值时,帮助提示框
将不显示,但可以利用应用程序控件的Hint特性通过其它控件,如状态条等显示帮助提示。
6、在状态栏或其他位置显示帮助信息
若要在状态栏或其他位置显示帮助信息,则在应用程序中使用OnHint事件处理程序。当鼠标指针移动
至组件上是,会产生应用程序的OnHint事件。如果一个提示既要在帮助提示框中显示,又要在OnHint事件处理
程序中显示,则可将要显示的内容用‘|’符合隔开。例如:Edit1.Hint := ‘Name|Enter Name in the edit Box’
Name在帮助提示框中显示,Enter Name in the edit Box可使用GetLongHint函数指定,在OnHint事件处理程序
中指定的提示显示。
OnHint事件的声明如下:property OnHint: TNotifyEvent; // TNotifyEvent = procedure (Sender: TObject) of object;
说明:当鼠标在一个控件上稍作停留,并且该控件的Hint特性非空时触发OnHind事件。
实例代码:
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.