枚举类型
一个枚举型的说明列出了所有这种类型可以包括的值: type
Tdays=(Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday);
可以定义上述枚举类型的
变量:
var
DayOfWeek:TDays;
在枚举型中,
括号中的每一个值都有一个由说明它的位置决定的整形值。例如Sunday有整形值0,Monday有整形值1等。您可以把DayOfWeek说明为一个整形
变量,并将一星期的每一天赋一个整形值以达到相同的效果,但用枚举型会使得程序可读性好,编写容易。当您在枚举型中列出值时,您同时说明了这个值是一个标识符。例如您的程序中如果已经含有TDays类型且说明了DayOfWeeks
变量,则程序中便不能使用Monday变量,因为它已经被说明为标识符了。
子界类型
子界型是下列这些类型中某范围内的值:整形、布尔量、字符型或枚举型。在您想限制一个
变量的取值范围时,子界型是非常有用的。
type
Thours=0..23;
TValidLetter='A'..'F';
TDays=(Sunday,Monday,Tuesday,Wednesday,Thursday,
Friday,Saturday);{枚举型}
TWorkDay=Monday..Friday;{一个TDays型的子界}
子界型限定了
变量的可能取值范围。当范围检查打开时,(在库单元的Implementation后面有{$R*.DFM}字样表示范围检查打开,否则您可以在Options|Project|ComplierOptions中选择RangeCheking来打开范围检查),如果
变量取到子界以外的值,会出现一个范围检查错误。
数组类型
数组是某种
数据类型的有序组合,其中每一个元素的值由其相对位置来指定,您可以在数组的某个位置上放置数据,并在需要时使用这些数据。下面的类型说明了一个Double型的
数组变量:
var
Check:array[1..10]ofDouble;
它表示Check指向一个含有10个Double型元素的数据串列,代表每一个元素的是1到10之间的数字,称为索引。数组的每一项由数组名称加上[]中的索引来表示。Check包含10个变量,Check[1]表示第一个变量。您也可以把数组定义成类型:
type
TCheck=array[1..10]ofDouble;
则
变量说明改为:
var
Check:TCheck;
您可以通过给数组赋值等方法来使用数组。下面的语句将0.0赋给Check数组中的所有元素:
forJ:=1to10do
Check[J]:=0.0;,
数组也可以是多维的,下面的类型定义了一个20行、20列的数组。
type
Ttable=array[1..20,1..20]ofDouble;
var
table1:TTable;
,;,;想将这一表格的所有数据初始化为0.0,您可以使用
for循环:
var
Col,Row:Integer;
…
forCol:=1to20do
forRow:=1to20do
Table1[Col,Row]:=0.0;
字符串类型
字符串类型事实上是一个一维的字符数组。当您说明一个字符串型的
变量时,您应当指明这个字符串的大小,下面是说明字符串类型的例子:
type
MyString:string[15];
var
MyName:MyString;
则
变量MyName被说明成为最多可以包含15个字符。如果您没有说明字符串的大小,Delphi会认为字符串包含最大值255个字符。给字符串赋值可以直接使用单引号括起的字串赋值:
MyName:='Frank.Smith';
或MyName:='
张明';
因为MyName是一个可以包含15个字符的MyString型
变量,上文的两个的变量都是有效的,一个汉字可以视作两个字符。当您给字符串型
变量赋的值多于定义数值时,例如将MyName赋为‘FrankSmith.Franklin’,则Delphi只会接受前15个字符‘FrankSmith.Fran’。在内存中,字符串通常占用比所说明的大小多一个
字节的空间,因为第一个位置是一个包含这个数组大小的字节。您可以使用索引值来访问字符串的字符,MyName[1]可以得到MyName的第一个字符'F'。
可以使用Delphi丰富的
运算符、过程和函数来处理字符串型的
变量和属性。下面介绍几个常用的运算符和Delphi过程或函数:
Concat和(+)功能相同,都可以将多个字符串组合在一起,建立一个较大的字符串;Copy会返回一个字符串中的子字符串;Delete在一个字符串中从一个指定位置起删除一定数目的字符;Insert在一个字符串中插入一个字符串;Length返回字符串的长度;Pos返回一个子字符串在一个字符串中的位置,即索引值。
集合类型
集合类型是一群相同类型元素的组合,这些类型必须是有限类型如整形、布尔型、字符型、枚举型和子界型。在检查一个值是否属于一个特定集合时,集合类型非常有用。下面的例程可以说明集合类型的用法:在
窗体上加入一个编辑框和一个按钮,清除编辑框中的文字,在其上加上Caption为“输入元音”的标签Label,并在编辑框的下方加入一个空的标签,将按钮的Default属性改为True,建立按钮的事件处理过程如下:
procedureTForm1.Button1Click(Sender:TObject);
type
Tvowels=setofChar;
var
Vowels:TVowels;
begin
Vowels:=['a','e','i','o','u'];
ifEdit1.Text[1]inVowelsthen
Lable2.Caption:='是元音';
else
Lable2.Caption:='请再试';
end;
执行这个程序,在编辑框中输入字母,表达式Edit1.Text[1]inVowels的结果是布尔型的,in是运算符,用来判断字母是否存在于集合中。输入的判别结果会显示在编辑框的下方。以上就用到了集合类型TVowels。
记录类型
记录是您的程序可以成组访问的一群数据的集合。下面的例程说明了一个记录类型的用法:
type
TEmployee=record
Name:string[20];
YearHired:1990..2000;
Salsry:Double;
Position:string[20];
end;
记录包含可以保存数据的域,每一个域有一个
数据类型。上文的记录TEmployee类型就含有四个域。您可以用以下的方式说明记录型的
变量:
var
NewEmployee,PromotedEmployee:TEmployee;
用如下的方法可以访问记录的单域:
NewEmployee.Salary:=1000;
编写如下的语句可以给整个记录赋值:
withPromotedEmployeedo
beginsfu nb
Name:='';
YearHired:=1993;
Salary:=2000.00
Position:='editor';
end;
您的程序可以将记录当成单一实体来操作:
PromptEmployee:=NewEmployee;
以上介绍了用户常用的自定义类型。在Delphi的编程中,对象是非常重要的用户自定义
数据类型。象记录一样,对象是结构化的
数据类型,它包含数据的域(Field),也包含作为方法的过程和函数。在Delphi中,当您向
窗体中加入一个部件,也就是向
窗体对象中加入了一个域;每一个部件也是对象,每当您建立一个事件处理过程使得部件可以响应一个事件时,您即自动地在窗体中加入了一个方法