Delphi标准控件-按钮(Button)和位图按钮(BitBtn)2007-05-08 洪恩在线 按钮(Button)是Windows应用程序界面中最常用、最简单的组件之一。除了按钮之外,Delphi还提供了一种位图按钮(BitBtn)。这种按钮的不同之处在于按钮上可以显示位图。下面我们通过一个简单的例子来介绍这两种按钮。在窗体Form1上放置两个普通按钮和两个位图按钮以及一个编辑框Edit,然后再添加一个窗体Form2,在其上放置一个标签和两个位图按钮。程序界面如下图所示:

按下表设置各按钮的属性:
| Form1 | Form2 |
属性 | Button1 | Button2 | BitBtn1 | BitBtin2 | BitBtn1 | BitBtn2 |
Caption | Button1 | Button2 | 对话框 | &Close | Ok | Cancel |
Kind | | | bkCustom | bkClose | bkOk | bkCancel |
Cancel | False | True | False | False | False | False |
Default | True | False | False | False | False | False |
ModalResult | mrNone | mrNone | mrNone | mrNone | mrOk | mrCancel |
以上均是按钮常用的一些属性,下面作简单的介绍:
Cancel: | 该属性值为True时,则无论用户何时按Esc键,都会执行该按钮的OnClick事件。如果同一个窗体上具有多个这样的按钮,则会执行TabOrder值最小的按钮的OnClick事件。 |
Default: | 这个属性和Cancel属性相似。当用户按下Enter键时,将执行该按钮的OnClick事件。但有一个例外,如果当前拥有输入焦点的控件为另一个按钮时,按Enter键时则只执行当前按钮的OnClick事件。 |
Kind: | 这个属性为位图按钮所特有,选择Kind属性的某个选项,用于决定该位图按钮的种类每一种位图按钮具有自己独特的功能。位图按钮常用于各种对话框或模态窗口中,根据按钮的ModalResult属性值来决定对模态窗口的操作。 |
ModalResult: | 模态值。当我们单击位图按钮时,将把对话框的模态值设为相同的值。它将决定位图按钮的父窗体的关闭方式。如单击mbOk按钮,将关闭对话框,返回mrOk值。 |
在完成界面设计后,开始编写事件处理过程。程序清单如下:
由于在程序中我们使用了两个窗体,而在Delphi中每个窗体对应一个单元,所以程序中便有两个单元(Unit1和Unit2)。在Delphi中不同单元之间的调用要在调用单元的实现部分(implementation)的开始进行申明,这里为:implementation
uses unit2;在添加Form2时,系统将自动在项目文件Project.dpr中添加生成Form2的语句:Application.CreateForm(TForm2, Form2);但是,程序运行时,只显示出Form1,Form2是隐藏的。为了显示出Form2,我们在窗体Form1的BitBtn1按钮的OnClick事件中添加如下的语句:form2.ShowModal;单击BitBtn1按钮,将以模态窗体的形式显示出来。所谓模态窗体(ModalForm)是指该窗体关闭之前,其他的窗体不能接受输入焦点。

按下F9编译运行程序,然后按Esc键,将弹出一个信息框,如右图所示。由于Button2的Cancel属性设为True,所以程序运行时,无论何时按下Esc键,将启动Button2的OnClick事件:procedure TForm1.Button2Click(Sender: TObject);
begin
showmessage("Button2的Cancel属性为True"); //显示出一个信息框
end;即按Esc键相当于单击Button2。单击Edit1,将输入焦点置于编辑框内,然后按下会车键。此时将发现触发了Button1的OnClick事件:procedure TForm1.Button1Click(Sender: TObject);
begin
edit1.Text:="Button1的Default属性为True";
end;因为Button1的Default属性设置为True,所以当输入焦点在编辑框中时,按下会车键时,将触发Button1的OnClick事件,如下图所示。

单击BitBtn1(标题为“对话框”)按钮,将弹出Form2窗体。Form2为模态对话框,单击mbOk按钮或mbCancel按钮,对话框都将自动关闭。如果你不想让对话框关闭,可以将位图按钮的ModalResult属性设置为BrNone。单击Form1的BitBtn2按钮(标题为“Close”),Form1将自动关闭。Form1为非模态窗体,但是BitBtn2按钮为mbClose按钮,所以它具有关闭窗体的功能。