本章要点
窗口、窗体的基本概念
窗体组件的属性
窗体组件的事件
窗体组件的方法
窗体的设计
窗体是应用程序设计时的窗口,是各种组件的载体。因此窗体设计是应用程序设计的基础。本章介绍窗体组件的使用和窗体的设计方法。
5.1窗口、窗体和窗体组件
5.1.1窗口
窗口是屏幕上被边框围住的一部分,是Windows应用程序的用户界面。一个标准的Windows应用程序窗口如图5-1所示。
100Delphi程序设计教程
窗口最上边是标题栏,其左端是窗口的名称,右端3个按钮从左到右分别是“最小化”
按钮、“最大化”按钮和“关闭”按钮。
标题栏的下边是菜单栏,列出控制程序运行的菜单命令。
菜单栏的下边是窗口的工作区(也称用户区),放置着窗口的其他组件、显示程序运行中的信息和程序运行的结果等。
从功能上分,窗口分两大类,即通常意义上的窗口和对话框。
Windows应用程序都有一个或几个窗口,其中有一个作为主窗口,主窗口是应用程序的入口。当应用程序有多个窗口时,通过主窗口的命令,可以激活其他的窗口。
5.1.2窗体组件和窗体
窗口是用窗体组件和它所包含的其他组件设计完成的。
窗体组件是一种特殊的组件,它不包含在组件板中,启动Delphi时系统会自动启用一个新的窗体组件;应用程序要添加新的窗体,只需执行菜单命令【File】→【New】→【Form】即可启用一个新的窗体组件。窗体组件是一个容器组件,它可以包容窗口中所使用的其他组件。窗体组件同其他组件一样,也有属性、事件和方法,因此设计窗口时也要设置窗体组件的属性、事件和方法。
因此可以说,窗体是设计阶段的窗口,而窗口是运行阶段的窗体。
5.2窗体组件的属性
窗体组件的属性有很多,分别决定窗体的外观、布局、状态和其他特性。这里只能介绍窗体组件的一些重要属性。
5.2.1窗体组件的外观属性
1.Caption属性
Caption属性决定窗体标题栏的标题。该属性是直接输入型属性。需要注意的是,Caption属性不同于Name属性,Name属性是窗体组件在程序中的标识符,程序运行时并不会显示出来。
2.BorderIcons属性
BorderIcons属性决定窗体标题栏是否有系统菜单、窗体最小化按钮、窗体最大化按钮和帮助按钮。该属性是集合型属性,包含4个布尔型的子属性:biSystemMenu、biMinimize、biMaxmize和biHelp,分别决定窗体标题栏是否有系统菜单、窗体最小化按钮、窗体最大化按钮和帮助按钮,子属性值为True,则表示有,子属性值为False,则表示没有。
3.BorderStyle属性
BorderStyle属性决定能否改变窗体的大小和窗口边框的形式。该属性是枚举型属性,有6种取值。各种属性值及决定的窗体效果如表5-1所示。其默认值为bsSizeable。
bsSizeToolWin可改变大小,工具窗体边框,标题栏较窄,没有最小化、最大化按钮和系统菜单bsToolWindows不能改变大小,工具窗体边框,标题栏较窄,没有最小化、最大化按钮和系统菜单4.Color属性
Color属性决定窗体的背景颜色。该属性是枚举型属性,共有42种选择,其默认值是clBtnFace。
5.Font属性
Font属性决定窗体中组件上的文字的字体、风格、大小和颜色。该属性既是编辑型属性,也是集合型属性;既可以通过对话框编辑,也可以通过子属性设置。在对象检查器中单击Font属性值右边的【…】按钮,打开【字体】对话框,如图5-2所示。通过该对话框设定窗体中组件上的文字的字体、风格、大小和颜色。
6.FormStyle属性
FormStyle属性决定窗体的类型。该属性是枚举型属性,有4种取值:fsMDIChild、fsMDIForm、fsNormal和fsStayOnTop,分别决定窗体为子窗体、父窗体、标准窗体和顶部窗体。顶部窗体指该窗体将保存在工程中其他窗体的顶部;父窗体和子窗体用在多文档界面程序(MDI)中,将在后面有关章节中介绍。其默认值为fsNormal。
7.HorizStrollBar和VertStrollBar属性HorizStrollBar和VertStrollBar属性决定窗体水平滚动条和垂直滚动条的属性。这两个属性都是集合型属性,各包含13个子属性,其中主要有:用鼠标单击一次滚动条的箭头,滑动块移动的距离;滑动块的初始位置;滑动块的最大滑动距离及滚动条是否可见等。
5.2.2窗体组件的布局属性
1.Align属性
Align属性决定窗体在显示器屏幕上的位置。该属性是枚举型属性,有6种取值:
alBottom、alClient、alLeft、alNone、alRight和alTop,分别决定窗体显示在显示器屏幕的下部、满屏、左边、窗体的位置、右边和上部。其默认值为alNone。
2.Left、Top、Width、Height、ClientWidth和ClientHeight属性这些属性都是直接输入型属性,其中Left和Top决定窗体左上角在显示器屏幕中的位置,Left为窗体左上角的横坐标,Top为窗体左上角的纵坐标;Width和Height决定窗体的宽度和高度;ClientWidth和ClientHeight决定窗体工作区的宽度和高度。
3.Constraints属性
Constraints属性决定窗体的宽度和高度的取值范围。该属性是集合型属性,包含4个直接输入型子属性:MaxWidth、MaxHeight、MinWidth和MinHeight分别为窗体的最大宽度、最大高度、最小宽度、最小高度,默认值都为0,即不做任何限制。
5.2.3窗体组件的状态属性
1.Enabled属性
Enabled属性决定窗口是否有效。该属性为布尔型属性,当为True时窗口有效,否则窗口无效。当窗口有效时,窗口才可以被激活,即窗口才可以接受键盘或鼠标事件(有的资料称为“获得聚焦”或“获得焦点”)。其默认值为True。
2.WindowState属性
WindowState属性决定窗口的初始状态,即程序开始运行时窗口的状态。该属性为枚举型属性,有3种取值:wsNormal、wsMaxmized和wsMinimized,决定窗口的初始状态分别为正常(即设计时窗体的尺寸)、最大化和最小化状态,默认值为wsNormal。
3.ActiveControl属性
ActiveControl属性决定窗体对应的单元程序运行时,窗口中哪个组件首先被激活,即首先获得聚焦。该属性为枚举型属性,其属性值处列出当前窗体中包含的所有组件,可选择其中的一个组件首先获得聚焦。
4.AutoScroll属性
AutoScroll属性决定程序运行、而有组件未能全部显示出来时,是否自动加入滚动条到窗口上。该属性为布尔型属性,其默认值为True。
5.2.4其他属性
Name属性指定窗体在程序中的名称。该属性为直接输入型属性,默认值为Form1、Form2……
需要说明的是,Name属性是每个组件都有的属性。
5.3窗体组件的事件
窗体组件作为最常用的组件,支持几乎所有的对象事件。本节只能介绍窗体组件的主要事件。
1.OnCreate事件
当程序运行、窗口被创建时,触发OnCreate事件。因此可以在OnCreate事件处理代码中,进行一些应用程序的初始化工作,如创建对象、为一些变量赋值等。
2.OnDestroy事件
当窗口被注销时,触发OnDetroy事件。该事件处理代码用来释放程序运行时占用的系统资源。
3.OnActivate和OnDeActivate事件
当窗口被激活时,触发OnActivate事件;而当窗口由激活状态变为非激活状态时,触发OnDeActivate事件。
4.OnClick和OnDbClick事件
单击窗口空白处,触发OnClick事件;双击窗口空白处,触发OnDbClick事件。
5.OnMouseDown、OnMouseUp和OnMouseMove事件这3个事件也都是由鼠标触发的事件,OnMouseDown是按下鼠标键触发的事件,OnMouseUp是松开按下的鼠标键触发的事件,OnMouseMove是移动鼠标触发的事104Delphi程序设计教程件。
6.OnKeyPress、OnKeyDown和OnKeyUp事件
这3个事件都是由键盘触发的事件,OnKeyPress是敲击键盘某个按键触发的事件,OnKeyDown是按下键盘某个按键触发的事件,而OnKeyUp是松开键盘按下的某个按键触发的事件。
7.OnPaint事件
OnPaint事件是窗口的用户区进行刷新操作时触发的事件。
8.OnShow和OnHide事件
当窗口由隐藏状态被显示时,触发OnShow事件;而窗口由显示状态被隐藏时,触发OnHide事件。
5.4窗体组件的方法
窗体组件还有若干方法,用以控制窗体的状态。
1.Close方法
Close方法用来关闭窗口。
2.Hide方法
Hide方法用来隐藏显示的窗口。
3.Show方法
Show方法用来显示窗口。
4.ShowModal方法
ShowModal方法用来以模式对话框的方式显示窗口。关于模式对话框的概念将在第8章对话框设计中介绍。
前面介绍过,组件方法的使用非常简单,其语法格式为:
组件名.方法;
如要关闭窗体组件Form1对应的窗口,则只需:
Form1.Close;
5.5窗体的设计
窗体的设计要经过如下一些步骤。
5.5.1创建窗体
创建一个新的窗体有以下几种方法。
1)启动Delphi,系统自动为新建项目创建一个新的窗体。
2)Delphi程序设计过程中,执行【File】→【New】→【Form】菜单命令,则在当前项目中创建一个新的窗体。
3)Delphi程序设计过程中,执行【File】→【New】→【Other】菜单命令,打开如图5-3所示【NewItems】对话框,选择对话框中的【Form】选项,也可在当前项目中创建一个新的窗体。
这时新建的窗体是一个空白的窗体,如图5-4所示。
5.5.2设置窗体组件的属性
如上所述,窗体组件的属性很多,只能根据需要,设置必要的属性,其他取默认值即可。
5.5.3将需要的组件放置窗体中并设置它们的属性
用前面介绍的方法,将需要的组件放置到窗体中。
在空白窗体组件中放置了2个按钮、3个标签、3个文本框的窗体如图5-5所示。
其他组件放置好以后,就可以根据需要设置这些组件的属性。常用组件的属性后面专门介绍。
5.5.4编辑组件