2.1.9.4 字符串类型 字符串类型事实上是一个一维的字符数组。当您说明一个字符串型的变量时,您应当指明这个字符串的大小,下面是说明字符串类型的例子: 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返回一个子字符串在一个字符串中的位置,即索引值。 2.1.9.5 集合类型 集合类型是一群相同类型元素的组合,这些类型必须是有限类型如整形、布尔型、字符型、枚举型和子界型。在检查一个值是否属于一个特定集合时,集合类型非常有用。下面的例程可以说明集合类型的用法: 在窗体上加入一个编辑框和一个按钮,清除编辑框中的文字,在其上加上Caption为“输入元音”的标签Label,并在编辑框的下方加入一个空的标签,将按钮的Default属性改为True,建立按钮的事件处理过程如下: procedure TForm1.Button1Click(Sender:TObject); type Tvowels=set of Char; var Vowels:TVowels; begin Vowels := ['a','e','i','o','u']; if Edit1.Text[1] in Vowels then Lable2.Caption := '是元音'; else Lable2.Caption := '请再试'; end; 执行这个程序,在编辑框中输入字母,表达式Edit1.Text[1] in Vowels的结果是布尔型的,in是运算符,用来判断字母是否存在于集合中。输入的判别结果会显示在编辑框的下方。以上就用到了集合类型TVowels。 2.1.9.6 记录类型 记录是您的程序可以成组访问的一群数据的集合。下面的例程说明了一个记录类型的用法: type TEmployee=record Name : string[20]; YearHired:1990..2000; Salsry: Double; Position: string[20]; end; 记录包含可以保存数据的域,每一个域有一个数据类型。上文的记录TEmployee类型就含有四个域。您可以用以下的方式说明记录型的变量: var NewEmployee,PromotedEmployee:TEmployee; 用如下的方法可以访问记录的单域: NewEmployee.Salary := 1000; 编写如下的语句可以给整个记录赋值: with PromotedEmployee do begin Name :=''; YearHired := 1993; Salary := 2000.00 Position := 'editor'; end; 您的程序可以将记录当成单一实体来操作: PromptEmployee := NewEmployee; 以上介绍了用户常用的自定义类型。在Delphi的编程中,对象是非常重要的用户自定义数据类型。象记录一样,对象是结构化的数据类型,它包含数据的域(Field),也包含作为方法的过程和函数。在Delphi中,当您向窗体中加入一个部件,也就是向窗体对象中加入了一个域;每一个部件也是对象,每当您建立一个事件处理过程使得部件可以响应一个事件时,您即自动地在窗体中加入了一个方法。在本章第2节中,将详细讲述Delphi面向对象编程的方法和技巧。 2.1.10 Object Pascal的库单元Unit Units是常量、变量、数据类型、过程和函数的集合,而且能够被多个应用程序所共享。Delphi已经拥有许多预定义的程序库单元可供您建立您的程序库单元使用。Delphi的Visual Component Library由多个程序库单元组成,它们说明了对象、部件以供您的应用程序用来设计用户界面。例如,当您在窗体中加入一个Check Box时,Delphi自动在您的程序库单元中加入了Stdctrls库单元,因为TCheckBox部件是在StdCtrls库单元中说明的。 当您设计您的窗体时,Delphi自动建立一个和您的窗体有关的库单元。您的库单元不必都和窗体有关,也可以使用预定义的只包含数学运算函数的库单元,或是自行编写数学函数库单元。在一个库单元中所有的说明都相互有关系,例如,CDialogs程序库单元包含了在您的应用程序中使用的普通对话框的所有说明。 2.1.10.1 Object Pascal程序库单元的结构 不管一个库单元是否和一个窗体有关,库单元的结构都是相同的。其结构如下: unit <库单元名称> interface uses <选择性的库单元列表> {公有说明} implementation uses <选择性的库单元列表> {私有说明} {过程和函数的执行部分} initialization {选择性的} {选择性的初始化程序} end. 2.1.10.2 程序库单元的接口部分 interface是库单元的接口部分,它决定了本库单元对其他任何库单元或程序的可见(可访问)部分。您可以在接口部分说明变量、常量、数据类型、过程和函数等等。Delphi在您设计窗体的库单元中,将窗体数据类型、窗体变量和事件处理过程都说明在这一部分。 interface标志库单元接口部分的开始。在interface中的说明对要使用这些说明的其他库单元或应用程序是可见的。一个库单元可以使用其他Unit的说明,只需要在uses子句中指明那些库单元即可。例如,您在库单元A中编写程序代码,且您想调用UnitB于interface部分说明的程序。您可以把库单元B的名称加入到A的interface部分的uses子句中,则任何A中的程序都可以调用B中说明的程序。而且,如果B中interface部分的uses子句中出现C库单元,尽管A中未曾出现C,A同样可以调用B、C库单元在interface中说明的程序。但如果B出现在A的interface部分的uses子句中,那么库单元A便不能出现在B的interface的uses子句中。因为这样会产生对库单元的循环访问。当试图编译时,会产生出现错误信息。 2.1.10.3 程序库单元的实现部分 实现部分implementation中包含interface中说明的过程、函数、事件处理过程的具体实现程序代码。这一部分可以有自己的额外说明,但这些说明是私有的,外部程序不能调用这些说明。在interface中说明的函数实体必须在implementation部分出现,可以使用标题简写:只输入procedure或function保留字,后面跟过程或函数的名称即可,其后则是程序的实现部分了。如果您在implementation部分说明任何常式,其标题并未出现在interface部分,则必须写全其标题部分。 在implementation部分的uses子句中指定的库单元,只供给本库单元的程序使用其interface中说明的程序。其他使用本库单元的库单元,不能访问这些在implementation的udes子句中库单元的说明,因为在implementation后进行的库单元包含是私有的。所以上例中,如果C出现在B的implementation部分,则A不能使用C的公有部分,除非C出现在A的uses子句中。在implementation中出现的循环访问是Delphi所允许的,如果A的implemetation的uses子句中出现B,则B的implementation部分也可以出现A。 2.1.10.4 程序库单元的初始化部分 初始化当前库单元所使用的数据,或是通过interface部分将数据提供给其他应用程序、库单元使用时,您可以在库单元中加入一个initialization部分,在库单元的end前加上您的初始化语句。当一个应用程序使用一个库单元时,在库单元中的initialization部分会先于其他的代码执行。如果一个应用程序使用了多个库单元,则每一个库单元的初始化部分都会在所有的程序代码前执行。 2.1.10.5 使用Delphi的可视化部件及其库单元 当您在窗体中加入可视化部件时,如果该部件在可视化部件库中,Delphi会在您的库单元的interface部分的uses子句中自动加上需要使用的库单元名称。但有些对象在Delphi的环境中并没有可视化部件存在,例如,您想在库单元中加入一个预定义的信息框,则您必须把MsgDlg库单元加入您的uses子句中。如果您要使用TPrinter对象的话,必须将Printer库单元加入uses子句中。在在线帮助中可以查到对象所属的预定义库单元。 要使用在其他库单元中说明的函数,应在函数的前面加上这一库单元的名称,并用‘.’号隔开。例如,要在Unit2中使用Unit1中说明的Calculate函数,应使用下面的方法: Number := Unit1.Calculate(10); 您可以在任何标识符如属性、常量、变量、数据类型、函数等之前加上库单元的名称。您可以在自由地在任何Delphi库单元中加入程序代码,但不要改变由Delphi生成的程序。 2.1.10.6 建立与窗体无关的新库单元 如果您想在工程中建立一个和任何窗体无关的新库单元,可以现选用File|New Unit。这时一个新的库单元加入了工程,新库单元的代码如下: unit Unit2; interface implementation end. Delphi将根据您的工程中的文件数目为您的库单元选择名称,您可以在程序骨架间加入您的程序代码。 当编译您的工程时,这个新加入的库单元会被编译为一个具有.DCU后缀的文件。这个新生成的文件是链接到工程的可执行文件上的机器代码。  
2/2 首页 上一页 1 2 |