下载
下面,将对D e l p h i编程的一些核心技能进行探讨,主要包括:
• 窗体和组件
• 菜单、工具栏和状态栏
• 鼠标和键盘
• 文件、目录和驱动器
• 打印
• 多线程
• 动态链接库
通过这一部分的学习,读者将了解开发 Wi n d o w s 环境下应用程序的一些关键技术,并可以
方便、快捷地开发一般的应用程序。
第3章 窗体和组件
本章主要介绍窗体和组件。具体如下:
• 窗体和组件
• 在窗体中使用组件
• 常用可视组件的用法
• 开发M D I 程序
• 与组件有关的方法与技巧
在D e l p h i编程的过程中,组件的使用非常重要。本章在对一些常用可视组件进行分类介绍
之后,将分别配以例程加以说明。
3.1 窗体和组件
在Wi n d o w s 操作系统中,人-机交互的界面主要是通过一些窗口和对话框实现的。在
D e l p h i中,这些窗口和对话框就是程序设计阶段的窗体, D e l p h i 的可视化设计工作就是在窗体
中进行的。
通常,窗体中会有一些控件,通过这些控件可以实现多种多样的功能。在 D e l p h i中,把这
些运行期间出现在窗口和对话框中的控件称为可视组件。在窗体中,不仅可以放置控件,还可
以放置一些运行期间不可视的组件,这些不可视组件集中地实现了一些特殊的功能。
可视组件(控件)可分为两类:窗口控件和图形控件。窗口控件是基于系统窗口的可视组
件,具有窗口句柄,可作为输入焦点并含有其他控件,例如 E d i t组件;图形控件没有窗口句柄,
不可作为输入焦点,也不能含有其他控件,例如 L a b e l 组件。图形控件比窗口控件使用的资源
少,尤其在控件数量比较多的情况下最好使用图形控件。
窗体和组件的关系非常密切。从视觉的角度来看,窗体就像一个容器,其中包容了可视组
第二部分 D e l p h i 编程的核心技能
件和不可视组件。从程序代码的角度来看,一个窗体对应一个源程序文件,其中定义了窗体中
所有组件的对象。
窗体和组件之间除了具有上述的不同点,还具有一些相同点。例如,从面向对象编程的角
度来看,所有组件都是 T C o m p o n e n t类派生类的一个对象。窗体类 ( T F o r m )也是从T C o m p o n e n t
类派生的,所以可以将窗体看成一个特殊的组件。
有些组件也具有窗体的“容器”属性,也就是在这些组件中可以放置其他组件,通常这些
组件称为容器组件。例如在L a b e l组件中可以放置E d i t组件,L a b e l 组件就是一个容器组件。
D e l p h i中的所有组件是在可视组件库 ( Visual Component Library,缩写为V C L )中封装的。
可视组件库是D e l p h i 中非常重要的一部分,不仅封装了所有组件对应的类,还封装了一些通用
的类。所有的这些类都是由一个基类派生出来的,也就是 TO b j e c t 类。了解可视组件库对于学
习组件、使用D e l p h i很有帮助。
3.1.1 窗体
可以通过了解窗体的属性、方法和事件来了解窗体。
窗体具有下面的一些重要属性:
(1) BorderIcons
属性B o r d e r I c o n s用来指定窗体标题栏上的图标,可以设置为下列数值:
• biSystemMenu 可以通过点击标题栏左边的图标或在标题栏上单击鼠标右键来显示控制
菜单。控制菜单有时也称为系统菜单。
• biMinimize 在标题栏右边显示最小化按钮。
• biMaximize 在标题栏右边显示最大化按钮。
• biHelp 在标题栏右边显示帮助按钮。只有窗体的 B o r d e r S t y l e属性设置为b s D i a l o g或者窗
体属性B o r d e r I c o n s中不包括b i M i n i m i z e和b i M a x i m i z e时,b i H e l p设置才有效。
窗体属性B o r d e r I c o n s的设置与属性B o r d e r S t y l e的设置可能会互斥,例如属性B o r d e r I c o n s的
b i M i n i m i z e和b i M a x i m i z e会与属性B o r d e r S t y l e的b s D i a l o g冲突,属性B o r d e r I c o n s的b i H e l p会与属
性B o r d e r S t y l e的b s S i z e a b l e冲突。
下面举例说明属性B o r d e r I c o n s的用法。后面与属性B o r d e r I c o n s 类似的属性可以采用同样的
操作方式。
在通过菜单File | NewApplication新建的应用程序中,窗体的B o r d e r I c o n s 属性默认设置为:
[ b i S y s t e m M e n u , b i M i n i m i z e , b i M a x i m i z e ] ,可以在窗体中增加一个按钮组件,在其默认事件
O n C l i c k的处理过程中添加下面的一段代码:
procedure TForm1.Button1Click(Sender: TO b j e c t ) ;
b e g i n
BorderIcons := BorderIcons - [biMaximize]; // 使最大化按钮失效
e n d ;
程序执行后,如果按下按钮后,则标题栏上的最大化按钮就失效了。
(2) BorderStyle
属性B o r d e r S t y l e用来设置窗体的外观和边框,可以指定为下面的数值:
• bsDialog 窗体为标准的对话框,边框大小不可以改变。
• bsSingle 窗体具有单线边框,大小不可以改变。
• bsNone 窗体没有边框,也没有标题栏,边界的大小不可以改变。
54基本第二部分 Delphi 编程的核心技能
下载
• bsSizeable 边框大小可变的标准窗体。
• b s To o l Window 风格与b s S i n g l e 相同,只是标题栏比较小。另外,对于这种风格的窗体,
属性B o r d e r I c o n s中设置的b i M i n i m i z e和b i M a x i m i z e并不起作用。
• b s S i z e To o l Win 风格与b s S i z e a b l e 相同,只是标题栏比较小。对于这种风格的窗体,属性
B o r d e r I c o n s中设置的b i M i n i m i z e和b i M a x i m i z e也不起作用。
(3) Caption
属性C a p t i o n用来指定窗体标题栏中的说明文字。
通常,对于Wi n d o w s系统中的多文档界面( M D I )应用程序,当主框架窗口中的子窗口以最
大化显示的时候,应用程序的标题栏中显示的内容为“ <应用程序名> - <打开的文档名>”;当
子窗口以非最大化窗口显示的时候,主框架窗口中只显示应用程序的名称,子窗口有自己的标
题栏,其中显示该窗口打开的文件名。所以,当窗体的显示方式发生了改变后,应该立即改变
标题栏中的内容。
(4) Font
属性F o n t用来设置窗体中文字的字体、颜色和字号等。
如果将窗体中组件的属性 P a r e n t F o n t设置为Tr u e,那么该组件的字体设置就与其父级窗体
的字体设置完全一样了。所以在程序设计的时候,为了保持整个系统风格的统一,应该使工程
中的窗体风格尽量一致,可以先设置窗体的 F o n t 属性,然后将窗体中所有组件的 P a r e n t F o n t属
性设置为Tr u e 就可以了。一般不要单个地对窗体中的组件进行 F o n t属性的设置。
(5) FormStyle
属性F o r m S t y l e用来指定窗体的类型。
从窗体类型的角度来看,Wi n d o w s 环境中的应用程序可以分为下面的三类:
• 多文档界面( M D I )应用程序 一般这种应用程序具有一个父级窗口和多个子窗口,可以同
时打开多个文档,分别在多个子窗口中显示。例如常用的字处理软件 Wo r d 等,可以同时
编辑多个文档。
• 单文档界面( S D I )应用程序 这种应用程序同时只能打开一个文档。例如 Wi n d o w s系统附
件中自带的“记事本”程序,只能同时编辑一个文本文件。
• 对话框应用程序 这种应用程序的主界面基于一个对话框类型的窗体。例如 Wi n d o w s系
统中自带的“扫雷”游戏程序。
此外,有些应用程序在运行期间可以总是显示在桌面的最前端,例如 Windows 98中的“程
序 | 附件 | 系统工具 | 系统监示器”。如果在菜单上选中了“查看(V) | 前端显示( A )”,则系统监
示器会一直显示在其他应用程序的窗口之上。
属性F o r m S t y l e可以分别实现上面所说的各种类型的应用程序,取值如下:
• fsNormal 普通类型的窗体。既不为M D I应用程序的父级窗口,也不为M D I应用程序的子
窗口。
• fsMDIChild MDI应用程序中的子窗体。
• fsMDIForm MDI应用程序中的父窗体。
• fsStayOnTop 在桌面最前端显示的窗体。
通常不要在程序运行期间改变窗体的类型。
(6) Icon
属性I c o n用来指定标题栏中显示的图标。
单击对象编辑器I c o n属性右边的省略号按钮,在弹出的 Picture Editor对话框中点击L o a d . . .
第3章章窗体和组件章名55
下载
按钮,就可以装入一个制作好的图标。
使用D e l p h i自带的工具Image Editor可以方便地制作图标。通过菜单Tools | Image Editor可
运行Image Editor。
如果需要动态地改变窗体F o r m 1 中的图标,可以调用下面的过程:
F o r m 1 . I c o n . L o a d F r o m F i l e ( ' M y I c o n . I C O ' ) ;
其中M y I c o n . I C O 是要在窗体F o r m 1 标题栏中显示的图标文件名。
(7) Name
属性N a m e用来标志工程中的窗体。
通常,应该在系统开发的设计阶段就将整个工程中所有窗体的名称确定,然后在编程阶
段根据设计文档修改窗体的 N a m e 属性。一般情况下,不要在程序运行期间通过代码修改
N a m e属性。
(8) Position
属性P o s i t i o n用来描述窗体的大小和显示的位置。可以是下列数值:
• poDesigned 窗体显示的位置和大小与设计期间的一致。
• poDefault 窗体每次显示时,与上次比较,往右下角移动了一些位置;窗体的高度和宽
度由Wi n d o w s 决定。
• poDefaultPosOnly 窗体以设计期间的大小显示,窗体显示的位置较上次向右下角移动了
一些。如果窗体以设计时的大小不可以在屏幕上完全显示,就移动到屏幕的左上角显示。
• poDefaultSizeOnly 窗体以设计期间的位置显示,窗体的大小由 Wi n d o w s 决定。
• poScreenCenter 窗体以设计期间的大小显示,窗体显示的位置总在屏幕的中间。考虑多
个监示器时位置的调整。
• poDesktopCenter 窗体以设计期间的大小显示;窗体显示的位置总在屏幕的中间。不考
虑多个监示器时的调整。
(9) Wi n d o w s S t a t e
属性Wi n d o w s S t a t e用来描述窗体显示的状态,可以取下面的三个数值之一:
• wsNormal 窗体以普通状态显示(既不是最大化状态,也不是最小化状态)。
• wsMinimized 窗体以最小化状态显示。
• wsMaximized 窗体以最大化状态显示。
3.1.2 组件
在D e l p h i编程的过程中,要经常使用到组件。通过可视组件,可以在窗体中方便地构建与
用户交互的界面。另外一些不可视的组件可以为程序增加许多强大的功能。在 D e l p h i 集成开发
环境的组件栏中,按照功能分类罗列了大量的组件,熟悉它们可以提高开发程序的进度。此外,
还可以根据需要,调整组件栏中组件的位置,或者在组件栏中添加、删除组件,还可以为了满
足一些特殊需求而创建新的组件,并把它们添加到组件栏中。
Delphi 5中默认的组件栏包括了表3 - 1 中所示的各个组件夹。
在对组件的学习过程中,可以采取从一般到特殊的方法,也就是先学习组件的共同性质,
然后针对具体的组件再做特殊的了解。
下面是D e l p h i中常用的几类可视组件:
• 文本组件。
• 特殊输入组件。
56基本第二部分 Delphi 编程的核心技能
下载
• 按钮及其分类组件。
• 列表组件。
• 分组组件。
• 信息反馈组件。
• 表格显示组件。
• 图形显示组件。
本章后面的几节中将对上面的几类可视组件的特殊性分别进行介绍,并配以例程加以说
明。
表3-1 Delphi 5中的各个组件夹
组 件 夹 作 用
S t a n d a r d 标准Wi n d o w s控件、框架、菜单等
A d d i t i o n a l 一些专用的Wi n d o w s控件
Wi n 3 2 3 2 位Wi n d o w s系统中的公用控件
S y s t e m 进行系统操作的组件(包括定时器、多媒体和 D D E等)
Data Access 操作数据库的组件,如访问数据库、表格、查询和报表等
Data Controls 进行数据库控制的组件
A D O 通过ActiveX Data Objects访问数据库的组件
I n t e r B a s e 提供与I n t e r B a s e直接联接的组件
M I D A S 开发多层数据库应用程序的组件
I n t e r n e t E x p r e s s 开发I n t e r n e t E x p r e s s应用程序( We b服务器应用程序和客户端
多层数据库应用程序)的组件
I n t e r n e t 开发We b服务的应用程序
F a s t N e t 提供I n t e r n e t操作的一些组件
Decision Cube 为应用程序提供多维数据分析的组件
Q R e p o r t 快速报表组件
D i a l o g s Wi n d o w s通用对话框组件
Win 3.1 提供与Windows 3.1兼容的一些组件
S a m p l e s 一些定制组件的例子
S e r v e r s 通用C O M 服务器组件
3.1.3 在窗体中使用组件
在窗体中使用组件主要包括:
• 向窗体中添加组件。
• 删除窗体中的组件。
• 调整组件的大小和位置。
• 设置可视组件的Ta b O r d e r。
• 组件的锁定和解锁。
• 设置窗体中组件的属性。
• 创建组件的事件处理过程。
1. 向窗体中添加组件
向窗体中添加组件的方法很多,主要有:
1) 在组件栏中需要添加的组件上单击一下鼠标左键,鼠标形状发生改变。然后在窗体中再
第3章章窗体和组件章名57
下载