第二章-Delphi面向对象的编程方法(一)(1)

Delphi的编程语言是以Pascal为基础的。Pascal语言具有可读性好、编写容易的特点,这使得它很适合作为基础的开发语言。同时,使用编译器创建的应用程序只生成单个可执行文件(.EXE),正是这种结合,使得Pascal成为Delphi这种先进开发环境的编程语言。

本章中,我们将讨论Object Pascal的主要特点,并讲解如何在事件处理过程和其他应用程序中,使用它来编制程序代码。本章将讲解Delphi应用程序中最常用的Object Pascal语法,而不是Pascal语言的一切细节。如果您完全不熟悉Pascal编程,请参阅一些基础的Pascal教程。如果您具有编程经验,并能熟练地使用其他流行程序语言,您将在本章的Object Pascal中发现一些相同的概念。如果您已经熟悉了Borland Pascal,就可以快速浏览或跳过本章。 

2.1 编写Object Pascal程序代码 

在前边的章节中,我们通过例程,已经编写了几行简单的代码。在本章中,我们将从熟悉Pascal编程的角度,配合实例,讲解Object Pascal编程的基本方法。

在编写自己的Object Pascal程序时,要注意程序的可读性。Pascal语言是英式结构语言,在程序中选择合适的缩排、大小写风格,并在需要时将程序代码分行,会使得程序代码能够很容易地被自己和他人读懂。一般的程序员都有这样的体验:如果不给程序加上适当的注解,一段时间后,自己也难以理清程序的流程。给程序及时地加上注释是良好的编程习惯。Delphi的注释需要加注在{}之间,编辑器会把它们处理成为空白。Delphi保留了Borland Pascal编辑器的风格,关键字采用黑体字,被注释的部分会变暗,这使得编程风格良好,易读易写。 

2.1.1 编写赋值语句 

在事件处理过程中,最常用到的工作就是把一个新值赋给一个属性或变量。在设计用户界面时,可以使用Object Inspector(Object Inspector)来改变其属性;但有时需要在程序执行时改变属性的值,而且有些属性只能在执行时改变,这些属性在Delphi的在线帮助的“Proprety”主题中被标为执行期属性。进行这种改变,就必须使用赋值语句。

下文的赋值语句表征一个OnClick事件。当按钮按动后,将编辑框部件Edit1的Color属性置为clRed:

procedure TForm1.Button1Click(Sender: TObject);

begin

Edit1.Color := clRed;

end; 

当按动按钮后赋值语句被执行,编辑框变成红色。

在语句中,部件的名称在属性前,中间用“.”表示属性的所属关系。这样就准确地指定了要将clRed值赋给哪一部件的哪一属性。赋值号为“:=”,不论给属性还是给变量赋值,都是将右边的值赋给左边的属性或变量。

当将一个属性值、变量、常量或文本数据赋给属性或变量时,所赋值的类型和接受此值的属性或变量的类型应相同或兼容。一个属性或变量的类型定义了此属性或变量的可能值集合,也定义了程序代码可以执行的运算。在前边的例程中,编辑框部件的Color属性和clRed的类型都是TColor。可以在在线帮助中找到一个属性的类型;另外一种方法是在Object Inspector中选定该属性值段,并按下F1键,则类型将在属性说明的结尾处列出,例如Color属性列出下边的语句: 

Property Color : TColor; 

有些属性是只读(Read Only)的,它们只能被读取,不能被改变。请查阅在线帮助,在Delphi中这些只读属性都有注解。 

2.1.2 标识符的说明与使用 

标识符是Delphi应用程序中一些量的名称,这些量包括变量(var)、常量(const)、类型(type)、过程(procedure)、方法(Method)及其他,Object Pascal 在应用标识符时,必须首先说明它们。Object Pascal是强类型语言,它的编译器可以检查确保赋给变量或属性的值是正确的类型,以便于您改正错误。因为Object Pascal是编译语言,所以Delphi的执行速度要比使用解释语言快得多。在使用标识符前说明它们,可以减少程序错误并增加代码的效率。 

2.1.2.1 变量

变量是程序代码中代表一个内存地址的标识符,而此地址的内存内容在程序代码执行时可以被改变。在使用变量前必须对它进行说明,即对它进行命名,并说明它的类型。在所有变量说明以前加上保留字var。变量说明左边是变量的名称,右边则是该变量的类型,中间用(:)隔开。 

var

Value ,Sum : Integer;

Line : String; 

在窗体中加入一个名称为Edit1的编辑框,再加入一个名称(属性Name)为Add的按钮部件,并建立如下的事件处理过程:

procedure TForm1.addClick(Sender: TObject);

var

X , Y: Integer;

begin

X := 100;

Y := 20;

Edit1.Text := IntToStr(X + Y);

end; 

在本例中,当按动ADD按钮时,编辑框中显示值120。在Object Pascal中,必须确保变量或属性被赋予类型相同或兼容的值。您可以尝试将赋给X的值改为100.0,或去掉IntToStr函数,在编译时会出现类型不匹配的错误,这也说明了Object Pascal强类型语言的特点。 

2.1.2.2 预定义类型 

Object Pascal有多个预定义的数据类型,您可以说明任何这些类型的变量:

整形:Integer的范围是-32768到32767,占2字节的内存;Shortint从-128到127,占1字节内存;Longint从-2147443648到2147483647 占4字节内存;Byte从0到255,占1字节;Word从0到65535,占2字节内存。它们都是没有小数部分的数字。

实型:Single可以包含7到8位有效小数部分,占用4字节的内存;Double类可以包含15到16位有效小数部分,占用8字节的内存;Extended类型包含19到20位有效小数部分,占用10字节内存;Comp可以包含19到20位有效小数部分,占用8字节内存。以上实数类型只有在8087/80287选项[N+]打开才可以使用。Real可以包含11到12位有效小数部分,占用6字节内存。它只有在和以前Borland Pascal兼容的情况下才使用,否则应使用Double或Extended。

布尔型:Boolean,只包含true或False两个值,占用1字节内存。

字符型:Char,一个ASCII字符;字符串类型String一串最长可达255个ASCII字符。

指针型:Pointer,可以指向任何特定类型。

字符串型:PChar,是一个指向以零结尾的字符串的指针。

除了预定义类型外,Delphi还有自行定义的类型。上述例程的TColor就是这种类型。此外,用户还可以定义自己的数据类型,这部分内容将在下文中详细讲述。

整型类别和实型类别都各有五种类型,同一类别中,所有的类型与其他同类别的都相容,您可以将一种类型的值赋给相同类别中不同类型的变量或属性,而只需要这个值的范围在被赋值的变量或属性的可能值范围内。例如,对于一个Shortint型的变量,可以接受在-128到127范围内的任意整数,例如Shortint类型的7;您不能将300赋给它,因为300已经超出了Shortint的范围了。将范围检查功能打开(选用Options|Project,并在Compiler Options Page中选择Range Checking),将会检查出一个范围错误;如果Range Checking没有被打开,那么程序代码将可以执行,但被赋值的值将不是您期望的值。

在一些情况下,您可以进行不同类型的变量或属性的赋值。一般来说,可以将一个较小范围的值赋给一个较大范围的值。例如,您可以将整型值10赋给一个接受实型值的Double属性而使得值成为10.0,但如果将一个Double类型的值赋给整形变量,则会出现类型错误。如果您不清楚类型的兼容性,可以参阅Delphi的在线帮助中“Type Compatibility and Assignment Compatibility”主题。 

时间: 2024-12-22 15:51:55

第二章-Delphi面向对象的编程方法(一)(1)的相关文章

第二章-Delphi面向对象的编程方法(三)(2)

2.1.9.4 字符串类型 字符串类型事实上是一个一维的字符数组.当您说明一个字符串型的变量时,您应当指明这个字符串的大小,下面是说明字符串类型的例子: type MyString: string[15]; var MyName: MyString; 则变量MyName被说明成为最多可以包含15个字符.如果您没有说明字符串的大小,Delphi会认为字符串包含最大值255个字符.给字符串赋值可以直接使用单引号括起的字串赋值: MyName := 'Frank.Smith'; 或MyName :=

第二章-Delphi面向对象的编程方法(四)(1)

2.1.10.7 将库单元加入工程 将库单元加入工程是比较简单的.无论是您自己建立的库单元还是Delphi建立的与窗体有关的库单元,如果已经完成,则先打开您想加入库单元的工程(可以用Open Project打开工程):再选用File|Open File,然后选择您想加入的源程序(.PAS文件),并选择OK即可.则库单元被加入到应用程序中. 2.2 用Delphi的对象进行编程 Delphi是基于面向对象编程的先进开发环境.面向对象的程序设计(OOP)是结构化语言的自然延伸.OOP的先进编程方法,

第二章-Delphi面向对象的编程方法(二)(2)

2.1.7 关于作用范围 2.1.7.1 标识符的作用范围 一个变量.常量.方法.类型或其他标识符的范围定义了这个标识符的活动区域.对于说明这个标识符的最小程序模块而言,此标识符是局部的.当您的应用程序在说明一个标识符的程序模块外执行时,该标识符就不在此范围内.这意味着此时执行的程序无法访问这个标识符,只有当程序再度进入说明这个标识符的程序模块时,才可以访问它. 下面的示意图表示一个含有两个库单元的工程,每个库单元中又各有三个过程或事件处理过程. 2.1.7.2 访问其他程序模块中的说明 您可以

第二章-Delphi面向对象的编程方法(四)(3)

2.2.6 对象变量的赋值 如果两个变量类型相同或兼容,您可以把其中一个对象变量赋给另一个对象变量.例如,对象TForm1和TForm2都是从TForm继承下来的类型,而且Form1和Form2已被说明过,那么您可以把Form1赋给Form2: Form2 :=Form1; 只要赋值的对象变量是被赋值的对象变量的祖先类型,您就可以将一个对象变量赋给另一个对象变量.例如,下面是一个TDataForm的类型说明,在变量说明部分一共说明了两个变量:AForm和DataForm. type TDataF

第二章-Delphi面向对象的编程方法(四)(2)

当您使用Object Inspector来改变对象(部件)的名称时,这个名称的改变会反映到程序中.例如,在Object Inspector中将Form1的Name属性命名为ColorBox,您会发现在类型说明部分,会将前文的TForm1改为: TColorBox=class(TForm); 并且在变量说明部分,会说明ColorBox为TColorBox类型的变量,由Delphi自动产生的事件处理过程名称会自动改为TColorBox.Button1Click:但您自行编写的实现部分的代码却不会被自

第二章-Delphi面向对象的编程方法(二)(1)

2.1.4 跳转语句 Object Pascal的跳转语句有if和case两个. 2.1.4.1 if语句 if语句会计算一个表达式,并根据计算结果决定程序流程.在上文的例程中,根据ColorDialog.Execute的返回值,决定窗体的背景颜色.if保留字后跟随一个生成Boolean值True或False的表达式.一般用"="作为关系运算符,比较产生一个布尔型值.当表达式为True时,执行then后的语句.否则执行else后的代码,if语句也可以不含else部分,表达式为False

第二章-Delphi面向对象的编程方法(三)(1)

2.1.8.4 过程和函数的语句部分 过程或函数的语句部分由begin开始,end结束.函数需要一个返回值.可以将返回值赋给函数名称,也可以将返回值赋给Result变量.下面的例程将返回值赋给函数名称: function CalculateInterest(Principal,InterestRate: Double):Double; begin CalculateInterest := Principal * InterestRate; end; 将返回值赋给Result变量也是可以的,则上面

第二章-Delphi面向对象的编程方法(一)(2)

2.1.2.3 常量 常量在说明时就被赋予了一个值,在程序执行过程中是不可改变的.下面的例子说明了三个常量: const Pi = 3.14159; Answer = 342; ProductName = "Delphi"; 象变量一样,常量也有类型.不同的是,常量假设其类型就是常量说明中其所代表的值的类型.上文的三个常量的类型分别是real型.整形.字符串型.常量用"= " 表示两边的值是相等的. 2.1.3 过程与函数 过程与函数是程序中执行特定工作的模块化部分

第五章-Delphi图形图像编程(一)(1)

在Delphi中,专门定义了一组对象和部件用以绘制图形,完成一些简单的图像功能.利用这些对象.部件的方法,可以方便地绘制各种常用图形:通过设置它们的属性,能得到不同风格的图形.另外,通过对鼠标事件的定义,可以方便的设计图形绘制程序. 本章将介绍以下内容: 1. TCanvas,TPen,TBrush,TColor对象的方法及属性: 2. 绘图功能的实现: 3. TImage,TPicture,TBitBtn,TBitmap部件的方法及属性: 4. 图像观测及处理. Graphex.dpr是一个简