第三章D e l p h i的窗体与组件教学要求:掌握窗体、编辑类组件、按钮类控件、列表类控件、分组类组件、时钟组件、菜单组件、工具栏组件和工具按钮、多选项卡的的属性、方法与事件,学会使用这些组件设计应用程序的界面。
掌握ShowMessage、ShowMessageFmt、MassageDlg、MassageDlgPos、InputBox、InputQuery对话框函数与对话框过程的特点,并能熟练应用。
熟悉公共对话框控件组件的属性,方法、事件及应用。
掌握创建新窗体的两种不同的方法及其应用。
掌握windows的模式与非模式窗体的概念及应用方法。
掌握焦点的含义,与焦点相关的属性,应用焦点设计程序的方法。
了解CreateMessageDialog函数的定义与用法、speedbutton和文件有关的控件的属性、方法与事件。
从本章开始,将介绍Delphi 编程的一些基本方法。
通过这一部分的学习,可以了解开发Windows 环境下应用程序的一些关键技术,并可以方便、快捷地开发一般的应用程序。
为了简化编程工作,Delphi 提供了许多功能强大的函数和类。
其中很重要的一部分就是组件类。
本章将重点介绍常见组件及其编程应用。
现在深入普及的Windows操作系统中,方便快捷的人机交互界面主要是通过窗体和对话框实现的。
在Delphi中,这些窗体和对话框就是程序设计阶段的窗体,Delphi的可视化设计工作就是在窗体中进行的。
通常,窗体中会有文字输入、滚动条、复选框、单选框、按钮等一系列组件,通过这些直观易懂的组件,可以方便的实现多种多样的功能。
在Delphi中,这些运行期间出现在窗体和对话框中的组件称为可视组件。
在窗体中,还可以放置一些运行期间非可视的组件,对应其它的TComponent子类。
这些不可视组件集中地实现了一些特殊的功能。
比如,时钟控制等功能。
●TComponent组件类,所有的组件都是由这个类派生来的。
●TControl子类(可视组件)可分为两类:窗体组件和图形组件。
●窗体组件对应TWinControl 子类,是基于系统窗体的可视组件,具有窗体句柄,可作为输入焦点或含有其它组件,例如TEdit组件、TPanel组件。
●图形组件对应TGraphicControl 子类,没有窗体句柄,不可作为输入焦点,也不能含有其它组件,例如Label 组件。
图形组件比窗体组件使用的资源少,尤其在组件数量比较多的情况下最好使用图形组件。
组件组的关系如图所示。
窗体和组件的关系非常密切。
窗体就像一个容器,其中包容了可视组件和非可视组件。
窗体和组件之间除了具有上述的不同点之外,还具有一些相同点。
例如,从面向对象编程的角度来看,所有组件都是TComponent 类派生类的一个对象。
窗体类(TForm)也是从TComponent 类派生的,所以可以将窗体看成一个特殊的组件。
有些组件也具有窗体的“容器”属性,也就是在这些组件中可以放置其它组件,通常这些组件称为容器组件。
例如Tpanel 组件就是一个容器组件,可以在Tpanel组件中放置其他组件。
Delphi 中的所有组件是在可视组件库(Visual Component Library,缩写为VCL)中封装的。
可视组件库是Delphi 中非常重要的一部分,不仅封装了所有组件对应的类,还封装了一些通用的类。
所有的这些类都是由一个基类派生出来的,也就是TObject 类。
了解可视组件库对于学习组件、使用Delphi 很有帮助。
Delphi 中的主要组件栏DELPHI组件常见属性及说明DELPHI常见事件及说明1.6 窗体介绍窗体是编写Delphi程序的工作底稿区,凡是与用户进行交互的程序都得使用窗体来设计用户界面。
在程序运行时,窗体实际上就是标准的应用程序主窗口、对话框及多文档界面的主窗口。
根据不同的窗体类型,Windows环境中的应用程序可以分为下面的三类:●单文档界面(SDI)应用程序:这种应用程序同时只能打开一个文档。
例如Windows 系统附件中的“画图”程序,只能同时编辑一个图像文件。
●多文档界面(MDI)应用程序:一般这种应用程序具有一个父窗体和多个子窗体,可以同时打开多个文档,分别在多个子窗体中显示。
例如常用的word软件,可以同时编辑多个文档。
●对话框应用程序:这种应用程序的主界面基于一个对话框类型的窗体。
例如Windows系统附件中的“磁盘扫描”程序。
此外,有些应用程序在运行期间可以总是显示在桌面的最前端,例如在Windows中按下系统热键Ctrl+Alt+Del,激活的关闭程序窗体会一直显示在其它应用程序的窗体之上,除非退出该程序。
窗体由标题栏、工作区和边界组成。
1.6.1 窗体的属性窗体的属性是与其外观密切相关的。
对于组件的属性除必要进行设定的外,一般使用它的默认值。
1.窗体的位置与大小窗体的位置与大小是由属性Left、Top、Width、Height、ClientWidth、ClientHeight、Position、Align来确定的。
一般来说前四个属性可以定义控件在它们所在的容器组件中的物理位置和大小,在Delphi中的可见组件都有这四个属性,而不可见组件没有这些属性。
●Heigth属性和Width属性分别指定窗体的高度和窗体的宽度●窗体的左上角相对于父容器(屏幕)的坐标:Top属性和Left属性●Align属性用来设定窗体相对与父容器(屏幕)的对齐方式,该属性为枚举类型,取值如下Position属性:在应用程序运行阶段,确定窗口在屏幕上的位置。
只有当Align属性为alNone时才有效,属性为枚举类型,取值如下:2. 窗体的名称与标题Caption属性确定了窗体的标题,当窗体最小化后,Caption属性值为图标的文本说明。
通常,对于多文档界面(MDI)应用程序,当主框架窗体中的子窗体最大化显示的时候,应用程序的标题栏中显示的内容为“<应用程序名>-<打开的文档名>”;当子窗体非最大化窗体显示的时候,主框架窗体中只显示应用程序的名称,子窗体有自己的标题栏,其中显示该窗体打开的文件名。
所以,当窗体的显示方式发生了改变后,应该立即改变标题栏中的内容。
默认情况下Name属性与Caption属性值相同,但不能混淆两者的作用。
Name属性是窗体对象的变量名,当工程中有多个窗体时,每个窗体的名称必须是唯一的,即其名称不能相同。
属性Name 用来标志工程中的窗体。
通常,应该在系统开发的设计阶段就将整个工程中所有窗体的名称确定,然后在编程阶段根据设计文档修改窗体的Name 属性。
不能在程序运行期间通过代码修改Name属性。
3.窗体的外观与风格与窗体的外观与样式有关的属性有:BorderIcons、BorderStyle、FormStyle、WindowStyle、HorzScrollBar和 VertScrollBar属性等。
●FormStyle属性可以分别实现各种类型的应用程序,取值如下:●BorderIcons属性用来指定窗体标题栏上的图标,该属性为集合类型,取值如下:●确定窗体的边界类型:BorderStyle属性,该属性为枚举类型,取值如下注意:窗体属性BorderIcons的设置与属性BorderStyle的设置可能会发生互斥,例如属性BorderIcons的biMinimize和biMaximize会与属性BorderStyle的bsDialog冲突,属性BorderIcons的biHelp会与属性BorderStyle的bsSizeable冲突。
●设置窗体的显示状态:WindowStyle属性,该属性为枚举类型,取值如下4.Font 属性属性Font 用来设置窗体中文字的字体、颜色和字号等,包含Color、Name、Size或Style等属性。
如果将窗体中组件的属性ParentFont 设置为True,那么该组件的字体设置就与其父级窗体的字体设置完全一样了。
在程序设计的时候,为了保持整个系统风格的统一,应该使工程中的窗体风格尽量一致,可以先设置窗体的Font 属性,然后将窗体中所有组件的ParentFont 属性设置为True 就可以了。
一般不要单个地对窗体中的组件进行Font 属性的设置。
5.Icon 属性属性Icon 用来指定标题栏中显示的图标。
单击对象编辑器Icon 属性右边的省略号按钮,在弹出的Picture Editor 对话框中点击Load...按钮,就可以装入一个制作好的图标。
使用Delphi 自带的工具Image Editor 可以方便地制作图标。
通过菜单Tools/ Image Editor可运行Image Editor 编辑制作图标。
如果需要动态地改变窗体Form1 中的图标,可以调用下面的过程:Form1.Icon.LoadFromFile('Icon1.ICO');其中Icon1.ICO是要在窗体Form1标题栏中显示的图标文件名。
1.6.2 窗体的事件窗体的事件很多,常用事件:1.Create事件和Destroy事件当创建窗体时,就产生Create事件;当释放窗体所占用的空间时,就会产生Destroy事件。
这两个事件过程的基本语法形式为:procedure TForm1.FormCreate(Sender: TObject);procedure TForm1.FormDestroy(Sender: TObject);应用:通常整个程序的初始化工作放在主窗体的Create事件中进行处理,比如读入将要用到的图形资源等,而这些资源的释放则放在主窗体的Destroy事件中进行处理。
例如:procedure TForm1.FormCreate(Sender: TObject);beginform1.Caption:='欢迎使用!';form1.Color:=clred;form1.Font.Color:=clblue;:='隶书';form1.Font.Size:=20;form1.Font.Style:=[fsbold,fsunderline,fsitalic];button1.Caption:='请按键';button1.Left:=130;button1.Top:=500;button1.Height:=50;button1.Width:=100;end;当创建窗体并显示时,下列事件按顺序出现:Create、Show、Paint、Activate。
参见表1-142.Show和Hide事件Show事件和Hide事件分别在窗体显示与隐藏时被触发。
✧当窗体的Visible属性设置为True时,窗体被显示,同时触发Show事件;✧当窗体的Visible属性设置为False时,窗体被隐藏,同时触发Hide事件。