教学课件Delphi面向对象程序设计

上传人:cn****1 文档编号:568634233 上传时间:2024-07-25 格式:PPT 页数:204 大小:2.44MB
返回 下载 相关 举报
教学课件Delphi面向对象程序设计_第1页
第1页 / 共204页
教学课件Delphi面向对象程序设计_第2页
第2页 / 共204页
教学课件Delphi面向对象程序设计_第3页
第3页 / 共204页
教学课件Delphi面向对象程序设计_第4页
第4页 / 共204页
教学课件Delphi面向对象程序设计_第5页
第5页 / 共204页
点击查看更多>>
资源描述

《教学课件Delphi面向对象程序设计》由会员分享,可在线阅读,更多相关《教学课件Delphi面向对象程序设计(204页珍藏版)》请在金锄头文库上搜索。

1、Delphi面向对象程序设计Delphi面向对象程序设计第一章 Delphi基础知识本章内容本章内容Borland公司和Delphi的传奇历史编程思想和编程工具的辩证关系Delphi7的集成开发环境Delphi编程的一般方法和步骤Delphi工程、窗体和单元文件Delphi面向对象程序设计1.0 Borland公司和公司和Delphi的传奇历史的传奇历史创始人: Niklaus Wirth与Borland并无直接关系,是他发明了Pascal语言。Phillipe Kahn也是他的学生。Delphi语言的演变过程是:Pascal、Object Pascal、Delphi。Niklaus Wirt

2、h在1984年获得计算机科学领域最高奖:图灵奖第一章 Delphi基础知识下一页返回Delphi面向对象程序设计第一章 Delphi基础知识1.0 Borland公司和公司和Delphi的传奇历史的传奇历史创始人: 菲力浦凯恩(Phillipe Kahn)是Niklaus Wirth的学生。在美国加利福尼亚州创建了Borland国际。当时就买出了100多万份Pascal拷贝。在C语言问世前,Pascal是风靡全球,最受欢迎的语言之一,创下了发行拷贝数最多的世界纪录。下一页上一页返回Delphi面向对象程序设计1.0 Borland公司和公司和Delphi的传奇历史的传奇历史创始人: Ander

3、s Hejlsberg是Borland所有Pascal编译器的架构师,Delphi前3个版本的架构师,C#的设计者,.Net的架构师。推荐书籍:Borland传奇李维著第一章 Delphi基础知识返回上一页下一页Delphi面向对象程序设计1.1 编程思想与编程工具的辩证关系编程思想与编程工具的辩证关系 开发工具之于程序员如同剑之于剑客,而程序员的“剑招”就是自身的编程修养、思想、理念等。只有扎扎实实地打好基础,具备良好的编程思想,才能体会“一剑西来,天外飞仙”的酣畅淋漓。 第一章 Delphi基础知识返回上一页下一页Delphi面向对象程序设计第一章 Delphi基础知识1.2 Delphi

4、7的集成开发环境的集成开发环境下一页返回上一页Delphi面向对象程序设计第一章 Delphi基础知识1.2 Delphi7的集成开发环境代码洞察(Code Insight)技术: 代码完善(Code Completion) 代码参数提示(Code Parameters) 代码模板专家( Code Templates) 符号洞察(Tooltip Symbol Insight) 返回上一页下一页Delphi面向对象程序设计第一章 Delphi基础知识1.3 Delphi编程的一般方法和步骤编程的一般方法和步骤控制台应用程序可视化应用程序组件的命名方式:组件前缀组件前缀组件功能组件功能 补充例程:

5、补充例程: 欢迎和时间返回上一页下一页Delphi面向对象程序设计第一章 Delphi基础知识1.4 Delphi工程、窗体和单元文件工程、窗体和单元文件Delphi的工程文件: 扩展名为.dpr,是整个应用程序的主程序。Delphi的窗体文件: 扩展名为.dfm,保存了窗体上各个对象(包括窗体本身)的属性设置,可以以窗体和文本两种方式打开。Delphi的单元文件: 扩展名为.pas,一个工程中可以包含若干单元,一个窗体文件对应一个单元文件,但是也可以有没有窗体的单元文件。返回上一页下一页Delphi面向对象程序设计工程文件的组成program PHello;uses Forms, UMain

6、 in UMain.pas frmHello; /单元模块说明单元模块说明$R *.resbegin /主程序开始主程序开始 Application.Initialize; Application.CreateForm(TfrmHello, frmHello); /创建主窗体创建主窗体 Application.Run; /启动主程序,将控制权交给主窗体启动主程序,将控制权交给主窗体end. /主程序结束主程序结束返回上一页下一页Delphi面向对象程序设计单元文件的组成unit UMain; /单元名称单元名称interface /接口部分接口部分uses /引用的外部单元,引用的外部单元,u

7、ses关键字类似于关键字类似于C/C+中的中的include Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TfrmHello = class(TForm) /声明窗体类声明窗体类 btnWelocome: TButton; /窗体类的成员窗体类的成员 btnClose: TButton; edtDisplay: TEdit; procedure btnCloseClick(Sender: TObject); /成员事件过程的声明成员事件过程的声

8、明 procedure btnWelocomeClick(Sender: TObject); procedure FormCreate(Sender: TObject); private Private declarations public Public declarations end; /类声明结束类声明结束var frmHello: TfrmHello; /声明窗体实例声明窗体实例implementation /实现部分实现部分$R *.dfmprocedure TfrmHello.btnCloseClick(Sender: TObject); /成员事件过程的实现成员事件过程的实现b

9、egin Close;end;end. /单元结束单元结束返回上一页Delphi面向对象程序设计第二章 Object Pascal语法基础本章内容本章内容保留字、指令字和标识符注释常量和变量常用数据类型运算符与表达式语句过程和函数Delphi面向对象程序设计第二章 Object Pascal语法基础2.1 保留字、指令符和标识符保留字、指令符和标识符保留字保留字(Reserve Words)是由系统规定的具有特定意义和用途的单词,在编程中不能被重新定义或作其它用途。指令符指令符(Directives)也是由系统规定的具有特定意义的单词,但它们可以被重新定义。一旦被重新定义,则在该定义的作用域之

10、内就采用新的含义。 保留字和指令符没必要死记硬背,熟悉后就知道了。下一页下一页返回返回Delphi面向对象程序设计第二章 Object Pascal语法基础2.1 保留字、指令符和标识符保留字、指令符和标识符标识符标识符(Identifiers)是用来表示常量、变量、属性、对象、类型、过程、函数、单元、对象等语法实体的名称的符号。Object Pascal中的标识符的命名规则如下:标识符可以由字母(AZ、az)、数字(09)、下划线组成。标识符必须由字母或下划线开头。标识符的长度不应该超过255个字符,如果超过,将只有前255个字符有效。不能使用保留字作为自定义标识符,尽量不要使用指令字作为自

11、定义标识符。下一页下一页返回返回上一页上一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.1 保留字、指令符和标识符保留字、指令符和标识符注意注意: (1)Object Pascal中,标识符不区分大小写。中,标识符不区分大小写。 (2)在Delphi的库文件中还预先定义了一些标识符,如标准数学函数Sqrt,Sin,标准数据类型如Boolean、Char等,应尽量避免使用这些标识符作为自定义的标识符,以免引起混淆。 (3)使用标识符时,必须先声明再使用,否则编译时,系统会显示错误信息,提示该标识符没有定义。下一页下一页返回返回上一页上一页Delphi面向对象程序设计

12、第二章 Object Pascal语法基础2.2 注释注释Delphi中支持三种格式的注释:中支持三种格式的注释:大括号: “”和“”;小括号和星号的组合: “(*”和“*)”;双斜线:“/”。 在编写程序的过程中,应养成良好的注释习惯,以增强程序的可读性。返回返回上一页上一页下一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.2 注释注释 作为良好的编程规范,在程序代码单元文件顶端必须拥有本单元文件的“单元说明”注释。对于常量、结构类型、函数/过程、自定义变量、代码段功能块、关键语句等有含义的代码部分,必须有注释行进行详细说明。注释行可在需说明部分行后以“/

13、XXXXXXXX”方式添加单行注释,也可在需说明部分行上以“XXXXXXXX”方式添加多行。 返回返回上一页上一页下一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.2 注释注释单元头定义,添加到每个单元的前面。*单元名称:功能描述:作者:软件名称:版本:公司名称:刀剑如梦软件创作室* 返回返回上一页上一页下一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.3 常量与变量常量与变量常量常量在程序运行过程中其值不会改变,可以分为直接常量和符号常量两种。注意注意:字符常量和字符串常量均以单引号括起来,如:a,Hello声明符号常量

14、的语法如下:Const ; ;返回返回上一页上一页下一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.3 常量与变量常量与变量变量变量在程序运行中其值可以改变。变量有三大要素:变量名、数据类型、变量值变量必须先声明后使用,声明变量的语法如下:var :; :;演示:演示:常量和变量的使用常量和变量的使用返回返回上一页上一页下一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.4 数据类型数据类型 数据类型决定了变量的取值范围以及能够参与数据类型决定了变量的取值范围以及能够参与的运算。的运算。 Object Pascal语言是一种

15、语言是一种“强数据类型强数据类型”语言。语言。返回返回上一页上一页下一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.4 数据类型数据类型简单数据类型字符串型结构类型指针类型过程类型变体类型 整型字符型布尔型枚举型子界型实型集合类型数组类型记录类型文件类型类类型原类类型接口类型有序类型返回返回上一页上一页下一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.4.1 简单数据类型简单数据类型 包括整型、字符型、布尔型、枚举型、子界型和实型。其中,整型、字符型、布尔型、枚举型和子界型这五种被称为有序数据类型(Ordinal)。 其中

16、,整型、字符型、布尔型、实型,再加上字符串型是Object Pascal内部预先定义好的数据类型,可以直接使用;其它类型必须先作类型定义后才能使用。返回返回上一页上一页下一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.4.1 简单数据类型简单数据类型 对于有序数据类型,常用的操作函数如下表所示:函数函数参数参数返回返回值值Dec有序类型变量变量减1后的值Inc有序类型变量变量加1后的值Pred有序表达式表达式前驱的值Succ有序表达式表达式后继的值Ord有序表达式有序表达式的值Low有序类型标识符或有序类型变量该类型的最小值High有序类型标识符或有序类型变

17、量该类型的最大值Odd有序表达式判断是否为奇数返回返回上一页上一页下一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.4.1 简单数据类型简单数据类型 整型整型(Integer):整型数据类型描述了整个数字集合的一个子集。 Delphi支持多种整型数据,请注意从取值范围、占用存储空间、有无符号等方面区别这些不同的整型。演示:整数数据类型的大小和范围整数数据类型的大小和范围 返回返回上一页上一页下一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.4.1 简单数据类型简单数据类型 字符型字符型(Character):字符型是存储单

18、个字符数据的类型 。 常用的字符型为Char。 常量字符可用代表它们的符号表示,如k,也可以用数字符号表示,如#78。后者还可以用Chr函数表示, Chr函数返回数字对应于AnsiChar或WideChar中的字符值,如Chr(78)返回值为小写字母k。函数Ord则用于获得字符在其字符集中的序号。 下面列出了一些常用的特殊字符#9跳格(Tab键)#10换行#13回车(Enter键)返回返回上一页上一页下一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.4.1 简单数据类型简单数据类型 布尔型布尔型(Boolean):布尔型数据用于逻辑运算,表示非真即假的情况。

19、布尔型变量的值为系统预定义的常量True和False,常用的布尔型为Boolean。 返回返回上一页上一页下一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.4.1 简单数据类型简单数据类型 枚举类型枚举类型(Enumerated Type):枚举类型采用列举出该类型所有可能取值的方式定义了一个有序的值的集合,其定义语法格式为:type =(值1,值2, ,值n);例如:type weekday=(Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday);注意:枚举类型也是有序类型。 返回返回上一页上一

20、页下一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.4.1 简单数据类型简单数据类型 子界类型子界类型(Subrange Type):子界类型定义了某种类型的取值范围,是另一种有序类型的子集,其定义语法格式为:type =起始值.终止值;例如:type MyNumber=0.128;注意:子界类型也是有序类型。 返回返回上一页上一页下一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.4.1 简单数据类型简单数据类型 实型实型(Real):实数类型定义了一个可以按照浮点格式进行描述的数字的集合。 常用的实数类型为Real。 返

21、回返回上一页上一页下一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.4.2 字符串类型字符串类型(String) 字符串类型用于表示一个字符的序列。常用的字符串类型为String,例如: var s:string; begin s:=Hello; end; 返回返回上一页上一页下一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.4.3 结构类型(结构类型(Structured Type) 集合类型集合类型(Set Type):集合类型是同种有序类型的值的集合,该有序类型为集合类型的基类型。其定义的语法格式为:type =se

22、t of ;例如:type TSomeInts=1.250;/定义子界类型定义子界类型TSomeInts TIntSet=set of TSomeInts;/定义集合类型定义集合类型TIntSet,其基类型为,其基类型为TSomeIntsVar IntSet1=TIntSet;begin IntSet1= 1, 3, 5, 7, 9; end;返回返回上一页上一页下一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.4.3 结构类型(结构类型(Structured Type) 数组类型数组类型(Array Type):数组类型表示的是同类数据的集合。数组类型的数

23、据每个元素都有一个唯一的下标值,可以通过在方括号中填入下标值的方式来访问数组中的元素。数组类型定义的语法格式为:type =array下标范围下标范围 of ;例如,下面的代码定义了一个有10个整型元素的数组:type TMyArr = array 1.10 of Integer;返回返回上一页上一页下一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.4.3 结构类型(结构类型(Structured Type) 数组既可以在声明时指定其大小,也可以在运行时动态分配内存改变大小,即动态数组。例如:type TMyArr1 = array1.10 of integ

24、er; /一维静态数组一维静态数组 TMyArr2 = array1.10,1.5 of integer; /二维静态数组二维静态数组 TMyArr3 = array of integer; /一维动态数组一维动态数组 TMyArr4 = array of array of integer; /二维动态数组二维动态数组返回返回上一页上一页下一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.4.3 结构类型(结构类型(Structured Type) 数组在使用时常常会用到Low和High函数来获取数组的下标和上标,同时,数组的使用常会和循环结构结合起来,例如:

25、Var Arr1: array1.10 of integer; I,Sum:integer;begin Sum:=0; For I:=Low(Arr1) to High(Arr1) do begin Arr1I:=I; sum:=sum+Arr1I; end; ShowMessage(Sum is +IntToStr(Sum);end;返回返回上一页上一页下一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.4.3 结构类型(结构类型(Structured Type) 对于动态数组而言,在使用前,需要调用SetLength过程设置数组的长度,例如:var A:a

26、rray of integer; I,Sum:integer;begin Sum:=0; SetLength(A,10); for I:=Low(A) to High(A) do begin AI:=I; Sum:=Sum+AI; end;end;返回返回上一页上一页下一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.4.3 结构类型(结构类型(Structured Type) 记录类型(记录类型(Record):记录类型类似于C语言中的结构体类型,可以用来保存一组不同数据类型的信息,记录中的每个成员(域),有它自身的数据类型。声明记录类型的语法格式为:typ

27、e = record Field1:FieldType1; Field2:FieldType2; end; 返回返回上一页上一页下一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.4.3 结构类型(结构类型(Structured Type)下面的例子说明了记录类型的使用方法: type TStudent = record StNumber:integer; StName:string; StScore:real; end; var Student1: TStudent;/声明TStudent类型的变量Student1。/为记录类型的变量Student1赋值 S

28、tudent1.StNumber:=1000; Student1.StName:=张三张三; Student1.StScore:=85.5; 需要注意的是,记录类型的变量不能在定义变量的时候为其赋初值。 返回返回上一页上一页下一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.4.4 指针类型(指针类型(Pointer) 指针是存放指定类型变量内存地址的变量,即指针类型的变量指向的是内存空间的地址。下面的例子说明了指针类型的简单用法:Var P:integer; X:integer;begin X:=100; P:=X;/将整型变量X的地址赋值给指针变量P Wr

29、iteln(x=,P);/输出P所指向地址中的内容,即X的值 Readln;end; 返回返回上一页上一页下一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.5 运算符与表达式运算符与表达式 Object Pascal中的运算符可以分为算术运算符、逻辑运算符、关系运算符、位运算符、指针运算符和集合运算符等。每种运算符结合其操作数的数据类型能够实现特定的功能。 表达式是由常量、变量、数值、运算符和函数调用等按照一定的语法规则组合起来的,可以用于确定赋给一个变量的值、计算函数或过程的参数、或判断一个条件等。 注意:使用运算符要注意优先级的问题。返回返回上一页上一页

30、下一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.5.1 算术运算符算术运算符 包括、*、/、div 、mod 。注意: 1.“+”和“-”运算符。可以放在操作数前,表示正数和负数。 2. “/”和“div”和“mod”运算符。“/”运算符进行浮点除,其操作数既可以是整型也可以是实型,运算结果是实型;“div”运算符进行整除,要求两个操作数都是整型,运算结果为经过四舍五入后得到的整数值;取模“mod”运算符也要求两个操作数都是整型,运算结果为两数相除后的余数。这三个运算符都要求第二个操作数的值不能为0。 返回返回上一页上一页下一页下一页Delphi面向对象程

31、序设计第二章 Object Pascal语法基础2.5.2 逻辑运算符逻辑运算符 包括not、and、or、xor 。 逻辑运算符的作用是进行逻辑运算,其操作数类型都要求是逻辑型,运算结果也是逻辑型。其中,not运算符的作用是逻辑取反;and运算符的作用是逻辑与;or运算符的作用是逻辑或;xor运算符的作用是逻辑异或。 返回返回上一页上一页下一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.5.3 关系运算符关系运算符 包括=、=。 关系运算符反映的是两个操作数之间的关系,其操作数可以是一般的数据类型,但运算结果只能是True和False两种逻辑型。注意:在O

32、bject Pascal中,判断不等使用的运算符是“”,而其它语言,如C语言中,使用的是“!=”;还要注意判断相等使用的“=”和赋值号“:=”之间的区别。返回返回上一页上一页下一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.6 语句语句 在Object Pascal中,语句是由关键字、运算符和操作数等组成的,并且以分号以分号“;”结尾结尾。 还可以将多条语句用“beginend ”括起来,称为复合语句。 返回返回上一页上一页下一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.6.1 赋值语句赋值语句 在Object Pasc

33、al中赋值号是“:=”,表示将赋值号右边表达式的值赋给左边的变量。注意注意: 1.不同语言中的赋值号不同,例如C语言中赋值使用“=”,而在Object Pascal中“=”是关系运算符,表示判断是否相等。 2.赋值符号左边必须是变量,不能是常量或者表达式。 返回返回上一页上一页下一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.6.2 条件语句条件语句在Object Pascal中,条件语句有两种基本形式: if语句和case语句。1.If语句语句 If语句有两种基本形式:if 条件表达式 then 语句if 条件表达式 then 语句1 else 语句2 对

34、于前者而言,仅当条件表达式的值为真,即条件满足时,语句才执行;对于后者,当条件表达式的值为真时,执行语句1,为假时,执行语句2。返回返回上一页上一页下一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.6.2 条件语句条件语句2.case语句语句 Case语句执行的是对一个结果的多种分支进行判断,由Case语句中表达式的值来决定具体执行哪个操作。当if语句非常复杂的时候,可以考虑用Case语句来代替它。Case语句的语法格式为:case SwitchExpression of Case1:Expression1; Case2:Expression2; CaseN

35、:Expressionn;else Statement;end;返回返回上一页上一页下一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.6.2 条件语句条件语句2.case语句语句注意注意:SwitchExpression应该是一个有序类型的表达式(如整型、字符型、布尔型、子界类型等),不能是实型值。caseN的值也应该是一个有序类型的值。而且每个值必须是常量,且必须是唯一的。返回返回上一页上一页下一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.6.3 循环语句循环语句 循环控制语句的作用是为了多次执行某个或某些语句,以大大

36、缩短程序的源代码,并增加程序的可读性。 Delphi中 的 循 环 控 制 语 句 主 要 是 fordo、repeatuntil和whiledo语句。返回返回上一页上一页下一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.6.3 循环语句循环语句fordo循环循环: Object Pascal中的for循环有两种方式,一种是循环变量增1,即: for 循环变量循环变量:=循环变量初值循环变量初值 to 循环变量终值循环变量终值 do 循环体循环体; 另一种是循环变量减1,即: for 循环变量循环变量:=循环变量初值循环变量初值 downto 循环变量终值循

37、环变量终值 do 循环体循环体;在to循环中,循环变量的初值必须小于终值,而在downto循环中,循环变量的初值必须大于终值。对于那些已知循环次数的问题来说,for循环是非常适合的。 返回返回上一页上一页下一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.6.3 循环语句循环语句repeatuntil循环循环: repeatuntil是直到型循环,它的语法格式为: repeat 循环体循环体; until 循环条件循环条件;返回返回上一页上一页下一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.6.3 循环语句循环语句Whil

38、edo循环循环: Whiledo是当型循环,它的语法格式为: while 循环条件循环条件 do 循环体循环体;请注意比较请注意比较repeatuntil和和Whiledo循环二者在循环体执循环二者在循环体执行次数、循环终止条件方面的差别。行次数、循环终止条件方面的差别。返回返回上一页上一页下一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.6.3 循环语句循环语句Break和和Continue语句语句 二者用于改变循环执行的流程。Break语句用来直接中断循环,Continue语句则用来跳出当次循环,而直接回到循环条件处进行判断,或者在for循环中,使循环变

39、量直接增加或减小1,然后继续循环(除非循环条件不满足或循环变量达到了上限)。这和C语言中的Break、Continue语句作用相同。 返回返回上一页上一页下一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.6.4 With语句语句 with语句的作用主要是用来简化代码的。例如下面的代码: Form1.Canvas.Pen.Width:=2; Form1.Canvas.Pen.Color:=clRed;可以用with语句来简化为: with Form1.Canvas.Pen do begin Width:=2; Color:=clRed; end; 返回返回上一

40、页上一页下一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.7 过程与函数过程与函数 过程与函数是一个相对独立的语句块,能够实现特定的功能,可以被其他程序块调用,类似于C语言中的子程序。 二者之间最大的差别是:函数在执行后有一个返回值,而过程则没有返回值。因此,函数可以作为表达式来使用。 返回返回上一页上一页下一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.7.1 过程的声明过程的声明过程声明的语法格式如下:procedure 过程名(形式参数列表);begin 过程体;end; 返回返回上一页上一页下一页下一页Delphi

41、面向对象程序设计第二章 Object Pascal语法基础2.7.2 函数的声明函数的声明函数声明的语法格式如下:函数声明的语法格式如下:function 函数名函数名(形式参数列表形式参数列表):返回值类型返回值类型;begin 函数体函数体;end; 返回返回上一页上一页下一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.7.3 过程与函数的参数过程与函数的参数 过程与函数的形参和实参之间的传递有传值和传过程与函数的形参和实参之间的传递有传值和传地址两种方式。地址两种方式。 传值方式是缺省的参数传递方式:即将实参的值传值方式是缺省的参数传递方式:即将实参的

42、值拷贝压入栈中,而函数或过程使用和操作的都是栈拷贝压入栈中,而函数或过程使用和操作的都是栈中的拷贝值,而不是原始值。因此在函数或过程中中的拷贝值,而不是原始值。因此在函数或过程中对参数的改变并不会影响到实参本身。对参数的改变并不会影响到实参本身。 如果在过程和函数声明时,在形参名前加如果在过程和函数声明时,在形参名前加var保保留字进行说明的话,就是传地址方式,也称为引用留字进行说明的话,就是传地址方式,也称为引用参数。当通过引用传递参数时,是直接引用参数原参数。当通过引用传递参数时,是直接引用参数原始值,函数或过程使用和操作的都是原始值,因此,始值,函数或过程使用和操作的都是原始值,因此,能

43、够在函数或过程中改变实参的值。能够在函数或过程中改变实参的值。 返回返回上一页上一页下一页下一页Delphi面向对象程序设计第二章 Object Pascal语法基础2.7.4 过程与函数的调用过程与函数的调用 函数或过程调用时,要求实参与形参数量相同,函数或过程调用时,要求实参与形参数量相同,顺序相同,类型相容,否则会出现编译错误或结果顺序相同,类型相容,否则会出现编译错误或结果错误。错误。返回返回上一页上一页Delphi面向对象程序设计第三章 Delphi面向对象编程思想本章内容本章内容面向对象程序设计的基本概念Delphi中类的声明、实现和使用构造方法和析构方法Delphi中类的继承性和

44、应用Delphi中类的多态性和应用Delphi中抽象方法和抽象类的应用Delphi中类操作符的应用Delphi面向对象程序设计第三章 面向对象编程思想3.0 面向对象程序设计的基本概念面向对象程序设计的基本概念3.0.0 什么是面向对象程序设计什么是面向对象程序设计OOP(Object Oriented Programming)?)?下一页下一页返返 回回Delphi面向对象程序设计3.0 面向对象程序设计的基本概念面向对象程序设计的基本概念OOP有以下几个基本观点:客观世界由对象组成,任何客观事物或实体都是对象,复杂的对象可以由简单对象组成。具有相同数据和操作的对象可归为一个类,对象是类的一

45、个实例。类可以派生出子类,子类继承父类的全部特性(数据和操作),又可以有自己的新特征。子类和父类构成层次结构。第三章 Delphi面向对象编程思想下一页下一页上一页上一页返返 回回Delphi面向对象程序设计3.0 面向对象程序设计的基本概念面向对象程序设计的基本概念OOP有以下几个基本观点:对象之间通过消息传递相互联系。类具有封装性,其数据和操作等对外界是不可见的,外界只能通过消息请求某些操作,提供所需服务。 面向对象对象类继承通信第三章 Delphi面向对象编程思想下一页下一页上一页上一页返返 回回Delphi面向对象程序设计3.0.1 面向对象方法的发展面向对象方法的发展初始阶段 Sim

46、ula语言是第一个里程碑,引入了类的概念和继承机制;Smalltalk语言发展阶段 C+为代表成熟阶段 面向对象分析和设计技术走向实用,最终形成了从分析、设计到编程、测试与维护一整套的软件工程体系第三章 Delphi面向对象编程思想下一页下一页上一页上一页返返 回回Delphi面向对象程序设计3.0.2 对象对象(Object) 系统中用来描述客观事物的一个实体,是构成系统的一个基本单位,由一组属性和对属性的操作方法(服务)组成。属性属性:描述对象的静态特征的数据项方法方法:描述对象的动态特征的操作序列 对象属性方法第三章 Delphi面向对象编程思想下一页下一页上一页上一页返返 回回Delp

47、hi面向对象程序设计3.0.3 类类(Class) 具有相同属性和方法的一组对象的集合,为该类的全部对象提供了统一的抽象描述,好比一个对象模板,用它可以产生多个对象。 类和对象的关系第三章 Delphi面向对象编程思想下一页下一页上一页上一页返返 回回Delphi面向对象程序设计3.0.4 封装封装(Encapsulation) 把对象的属性和方法结合成一个独立的系统单位,并尽可能隐藏对象的内部细节。 封装的概念第三章 Delphi面向对象编程思想下一页下一页上一页上一页返返 回回Delphi面向对象程序设计3.0.5 继承继承(Inheritance) 子类可以自动拥有父类的全部属性和方法。

48、 类的继承第三章 Delphi面向对象编程思想下一页下一页上一页上一页返返 回回Delphi面向对象程序设计3.0.6 消息消息(Message) 对象发出的服务请求,一般包含提供服务的对象标识、服务标识、输入信息和应答信息等信息。 消息驱动第三章 Delphi面向对象编程思想下一页下一页上一页上一页返返 回回Delphi面向对象程序设计3.0.6 多态性多态性(Polymorphism ) 在父类中定义的属性或服务被子类继承后,可以具有不同的数据类型或表现出不同的行为。第三章 Delphi面向对象编程思想下一页下一页上一页上一页返返 回回Delphi面向对象程序设计3.1 Delphi中类的

49、声明、实现和使用中类的声明、实现和使用3.1.1 类的声明类的声明类声明的语法格式如下:type 类名 = class(基类) 数据成员声明 过程和函数声明 属性声明 end; 第三章 Delphi面向对象编程思想下一页下一页上一页上一页返返 回回Delphi面向对象程序设计3.1.1 类的声明类的声明注意:注意: 1.类名可以为任何合法的标识符,但习惯上一般以大写的字母“T”开头,以和Borland公司的编码风格吻合; 2.class为保留字,表示声明的是类类型; 3.class保留字后的括号中是基类名,表示当前声明的类是从该基类继承,如果类声明中省略基类名,则当前声明的类缺省从根类TObj

50、ect类继承。 第三章 Delphi面向对象编程思想下一页下一页上一页上一页返返 回回Delphi面向对象程序设计3.1.1 类的声明类的声明类声明示例:类声明示例:type THuman = class(TObject) private Fname : String; FAge : Integer; public procedure SetAge(Value : integer); function GetName : string; procedure SetName(Value : string);procedure SayHello(Words : string); property

51、Age : integer read Fage write SetAge; end;第三章 Delphi面向对象编程思想下一页下一页上一页上一页返返 回回Delphi面向对象程序设计3.1.2 类的实现类的实现 类的实现实际上是类的方法成员的实现。类的声明中方法成员只给出了函数或过程的首部,而函数体和过程体则要在类的实现部分给出。在Delphi中类的声明和实现必须分开。 第三章 Delphi面向对象编程思想下一页下一页上一页上一页返返 回回Delphi面向对象程序设计3.1 Delphi中类的声明、实现和使用中类的声明、实现和使用类的实现类的实现 即类的方法成员的实现。类的声明中即类的方法成员

52、的实现。类的声明中方法成员只给出了函数或过程的首部,方法成员只给出了函数或过程的首部,而函数体和过程体则要在类的实现部分而函数体和过程体则要在类的实现部分给出。在给出。在Delphi中类的声明和实现必须分中类的声明和实现必须分开开。 第三章 Delphi面向对象编程思想3.1.3 类的使用类的使用 使用类前需要先创建类的对象实例,再通过该对象实例去访问域、属性和方法以完成类的各种操作。具体步骤如下:1.声明类的一个变量,即类的对象变量。这时可以将类作为一种用户自定义的数据类型来看待;2.调用类的构造方法来生成类的对象实例,并为对象在内存中分配资源,将对象变量的隐含指针指向该内存的首地址。类的构

53、造方法一般命名为Create。3.对类的对象实例进行操作、使用。可以修改对象的属性或调用对象的方法。形式形如:对象名属性名或对象名方法名(参数)。4.对象使用完毕后,调用类的析构方法来删除对象并释放相应的内存资源。析构方法一般命名为Destroy,我们一般会使用Free过程来间接调用类的析构方法,以避免删除不存在的对象而出错。 下一页下一页上一页上一页返返 回回Delphi面向对象程序设计3.1 Delphi中类的声明、实现和使用中类的声明、实现和使用类的实现类的实现 即类的方法成员的实现。类的声明中即类的方法成员的实现。类的声明中方法成员只给出了函数或过程的首部,方法成员只给出了函数或过程的

54、首部,而函数体和过程体则要在类的实现部分而函数体和过程体则要在类的实现部分给出。在给出。在Delphi中类的声明和实现必须分中类的声明和实现必须分开开。 第三章 Delphi面向对象编程思想3.2 构造方法和析构方法构造方法和析构方法3.2.1 构造方法构造方法 构造方法是类中特殊的创建和初始化对象实例的方法。构造方法的声明与普通的过程类型声明类似,但是使用Constructor保留字代替Procedure,构造方法的方法名可以是任何合法的标识符,但一般来说,我们都用Create作为构造方法的方法名。 下一页下一页上一页上一页返返 回回Delphi面向对象程序设计3.1 Delphi中类的声明

55、、实现和使用中类的声明、实现和使用类的实现类的实现 即类的方法成员的实现。类的声明中即类的方法成员的实现。类的声明中方法成员只给出了函数或过程的首部,方法成员只给出了函数或过程的首部,而函数体和过程体则要在类的实现部分而函数体和过程体则要在类的实现部分给出。在给出。在Delphi中类的声明和实现必须分中类的声明和实现必须分开开。 第三章 Delphi面向对象编程思想3.2 构造方法和析构方法构造方法和析构方法3.2.2 析构方法析构方法 析构方法用于释放对象实例所占用的内存。析构方法的声明和过程方法类似,只是使用保留字destructor。析构方法的方法名一般为Destroy。 下一页下一页上

56、一页上一页返返 回回Delphi面向对象程序设计3.1 Delphi中类的声明、实现和使用中类的声明、实现和使用类的实现类的实现 即类的方法成员的实现。类的声明中即类的方法成员的实现。类的声明中方法成员只给出了函数或过程的首部,方法成员只给出了函数或过程的首部,而函数体和过程体则要在类的实现部分而函数体和过程体则要在类的实现部分给出。在给出。在Delphi中类的声明和实现必须分中类的声明和实现必须分开开。 第三章 Delphi面向对象编程思想3.3 Delphi中类的继承性和应用中类的继承性和应用 类的继承机制提供了通过重用已有代码定义新类的手段,使父类的数据结构和操作能被子类重用;并在两个或

57、多个不同的类之间建立了关系,使得程序具有良好的结构。 Delphi使用派生类实现继承,允许从任何已存在的类基类(Base Class)或父类(Parent Class)派生新类派生类(Derived Class)或子类(Child Class)。 使用继承机制一般应该遵循is-a原则,即子类对象是父类对象的特例。 下一页下一页上一页上一页返返 回回Delphi面向对象程序设计3.1 Delphi中类的声明、实现和使用中类的声明、实现和使用类的实现类的实现 即类的方法成员的实现。类的声明中即类的方法成员的实现。类的声明中方法成员只给出了函数或过程的首部,方法成员只给出了函数或过程的首部,而函数体

58、和过程体则要在类的实现部分而函数体和过程体则要在类的实现部分给出。在给出。在Delphi中类的声明和实现必须分中类的声明和实现必须分开开。 第三章 Delphi面向对象编程思想3.3 Delphi中类的继承性和应用中类的继承性和应用Delphi中表示类的继承的语法是: type 子类名 = class(父类名) 子类的域、属性和方法的声明 end; 子类中仅需要自身特有而父类缺少的数据结构和操作,或修改父类的操作即可。注意:注意:在Delphi中,子类会继承父类所有的域、属性和方法,但却不是全部都能在子类中被访问。这里有类成员的可见性问题。下一页下一页上一页上一页返返 回回Delphi面向对象

59、程序设计3.3 Delphi中类的继承性和应用中类的继承性和应用 Delphi中类成员的可见性分为单元级可见性和类级可见性。 单元级可见性:同一个单元文件中定义的类之间可以相互访问其所有的域或属性。 类级可见性:Private(私有成员,只能被类本身访问)、Protected(保护成员,类似于Private成员,但是可以被派生类访问)、Public(公有成员,可以被程序中任何代码访问)、Published(发布成员,类似于Public成员,但可以在Object Inspector中显示)第三章 Delphi面向对象编程思想Delphi面向对象程序设计3.1 Delphi中类的声明、实现和使用中

60、类的声明、实现和使用类的实现类的实现 即类的方法成员的实现。类的声明中即类的方法成员的实现。类的声明中方法成员只给出了函数或过程的首部,方法成员只给出了函数或过程的首部,而函数体和过程体则要在类的实现部分而函数体和过程体则要在类的实现部分给出。在给出。在Delphi中类的声明和实现必须分中类的声明和实现必须分开开。 第三章 Delphi面向对象编程思想3.3 Delphi中类的继承性和应用中类的继承性和应用 VCL(Visual Component Liberary)可视化组件库由若干被称为组件的类组成,这些类之间有一定的继承层次关系。 所有的VCL类都继承自TObject类,所有的VCL组件

61、都继承自TComponent类。可见的组件如TForm、TButton、TEdit等,将出现在运行时的屏幕上,成为控件(Control)。所有运行时可见的组件都由TControl类派生,因而控件是组件的一个子集。下一页下一页上一页上一页返返 回回Delphi面向对象程序设计3.1 Delphi中类的声明、实现和使用中类的声明、实现和使用类的实现类的实现 即类的方法成员的实现。类的声明中即类的方法成员的实现。类的声明中方法成员只给出了函数或过程的首部,方法成员只给出了函数或过程的首部,而函数体和过程体则要在类的实现部分而函数体和过程体则要在类的实现部分给出。在给出。在Delphi中类的声明和实现

62、必须分中类的声明和实现必须分开开。 第三章 Delphi面向对象编程思想3.4 Delphi中类的多态性和应用中类的多态性和应用 多态性允许将子类类型的指针赋值给父类类型的指针。在ObjectPascal中多态性是通过虚方法实现的。下一页下一页上一页上一页返返 回回Delphi面向对象程序设计3.1 Delphi中类的声明、实现和使用中类的声明、实现和使用类的实现类的实现 即类的方法成员的实现。类的声明中即类的方法成员的实现。类的声明中方法成员只给出了函数或过程的首部,方法成员只给出了函数或过程的首部,而函数体和过程体则要在类的实现部分而函数体和过程体则要在类的实现部分给出。在给出。在Delp

63、hi中类的声明和实现必须分中类的声明和实现必须分开开。 第三章 Delphi面向对象编程思想3.4.1 静态方法静态方法 如果在类的声明中,在方法后不使用virtual或dynamic等方法指示符,则该方法就是静态方法。我们在类中声明的方法缺省就是静态方法。 如果在父类中定义了一个静态方法,在它的派生类中可以定义不同实现的同名方法,其本质相当于对父类同名方法的重载。当调用静态方法时,方法名前的对象的声明类型唯一确定调用哪一个方法。下一页下一页上一页上一页返返 回回Delphi面向对象程序设计3.1 Delphi中类的声明、实现和使用中类的声明、实现和使用类的实现类的实现 即类的方法成员的实现。

64、类的声明中即类的方法成员的实现。类的声明中方法成员只给出了函数或过程的首部,方法成员只给出了函数或过程的首部,而函数体和过程体则要在类的实现部分而函数体和过程体则要在类的实现部分给出。在给出。在Delphi中类的声明和实现必须分中类的声明和实现必须分开开。 第三章 Delphi面向对象编程思想3.4.2 虚拟方法虚拟方法 如果在类的声明中,在方法后使用virtual保留字,则该方法就是虚拟方法。 在派生类中可以用override保留字来覆盖父类中的虚拟方法。 在调用虚拟方法时,调用对象在运行时所引用的实际对象类型决定调用哪一个方法,而不管调用对象声明时是什么类型。即使将一个子类的对象变量转换为

65、父类类型,只要它实际引用的是子类类型的对象实例,调用的都将是子类的方法。 下一页下一页上一页上一页返返 回回Delphi面向对象程序设计3.1 Delphi中类的声明、实现和使用中类的声明、实现和使用类的实现类的实现 即类的方法成员的实现。类的声明中即类的方法成员的实现。类的声明中方法成员只给出了函数或过程的首部,方法成员只给出了函数或过程的首部,而函数体和过程体则要在类的实现部分而函数体和过程体则要在类的实现部分给出。在给出。在Delphi中类的声明和实现必须分中类的声明和实现必须分开开。 第三章 Delphi面向对象编程思想3.4.3 动态方法动态方法 如果在类的声明中,在方法后使用dyn

66、amic保留字,该方法就成为动态方法。 动态方法与虚拟方法在语义上是等价的,都可以在派生类中用override保留字覆盖来实现多态。它们唯一的区别在于Delphi对方法调用策略的内部实现上:虚拟方法从速度最优的角度实现代码优化,而动态方法则从空间最优的角度实现代码优化。 下一页下一页上一页上一页返返 回回Delphi面向对象程序设计3.1 Delphi中类的声明、实现和使用中类的声明、实现和使用类的实现类的实现 即类的方法成员的实现。类的声明中即类的方法成员的实现。类的声明中方法成员只给出了函数或过程的首部,方法成员只给出了函数或过程的首部,而函数体和过程体则要在类的实现部分而函数体和过程体则

67、要在类的实现部分给出。在给出。在Delphi中类的声明和实现必须分中类的声明和实现必须分开开。 第三章 Delphi面向对象编程思想3.4.4 多态性小结多态性小结要实现多态性,下述三大要素是必需的:在父类中定义虚拟或动态方法;在子类中覆盖(override)父类中的虚拟或动态方法;声明父类类型的变量,则该变量既可以指向父类的实例,也可以指向子类的实例。当变量指向父类的实例时,调用的是父类的方法;当变量指向子类实例时则调用子类同名的方法。下一页下一页上一页上一页返返 回回Delphi面向对象程序设计3.1 Delphi中类的声明、实现和使用中类的声明、实现和使用类的实现类的实现 即类的方法成员

68、的实现。类的声明中即类的方法成员的实现。类的声明中方法成员只给出了函数或过程的首部,方法成员只给出了函数或过程的首部,而函数体和过程体则要在类的实现部分而函数体和过程体则要在类的实现部分给出。在给出。在Delphi中类的声明和实现必须分中类的声明和实现必须分开开。 第三章 Delphi面向对象编程思想3.5 Delphi中抽象方法和抽象类的应用中抽象方法和抽象类的应用 抽象方法的声明使用abstract保留字,并且该保留字必须位于virtual或dynamic保留字之后,即抽象方法总是虚拟方法或动态方法。 一个方法一旦声明为抽象的,则具有该方法的当前类就不需要实现它,它的实现延迟到子类中进行。

69、 包含了抽象方法声明的类为抽象类。注意:注意: Object Pascal虽然允许创建抽象类的对象实例,且允许该实例调用其非抽象方法,但不允许调用其中的抽象方法,因为根本没有该方法的实现。 下一页下一页上一页上一页返返 回回Delphi面向对象程序设计3.1 Delphi中类的声明、实现和使用中类的声明、实现和使用类的实现类的实现 即类的方法成员的实现。类的声明中即类的方法成员的实现。类的声明中方法成员只给出了函数或过程的首部,方法成员只给出了函数或过程的首部,而函数体和过程体则要在类的实现部分而函数体和过程体则要在类的实现部分给出。在给出。在Delphi中类的声明和实现必须分中类的声明和实现

70、必须分开开。 第三章 Delphi面向对象编程思想3.6 Delphi中类操作符的应用中类操作符的应用 在程序运行期间,可以使用is操作符和as操作符来进行类的运行时类型信息检测和类型转换。通常把这两个操作符称为类操作符。 下一页下一页上一页上一页返返 回回Delphi面向对象程序设计3.1 Delphi中类的声明、实现和使用中类的声明、实现和使用类的实现类的实现 即类的方法成员的实现。类的声明中即类的方法成员的实现。类的声明中方法成员只给出了函数或过程的首部,方法成员只给出了函数或过程的首部,而函数体和过程体则要在类的实现部分而函数体和过程体则要在类的实现部分给出。在给出。在Delphi中类

71、的声明和实现必须分中类的声明和实现必须分开开。 第三章 Delphi面向对象编程思想3.6.1 类型判断操作符类型判断操作符is 操作符is用来测试对象变量的类型与给定的对象变量是否相容。也就是说,is操作符用于判断对象是否是操作符右边的同类或派生类。其语法形式为: 对象变量名 is 类名;下一页下一页上一页上一页返返 回回Delphi面向对象程序设计3.1 Delphi中类的声明、实现和使用中类的声明、实现和使用类的实现类的实现 即类的方法成员的实现。类的声明中即类的方法成员的实现。类的声明中方法成员只给出了函数或过程的首部,方法成员只给出了函数或过程的首部,而函数体和过程体则要在类的实现部

72、分而函数体和过程体则要在类的实现部分给出。在给出。在Delphi中类的声明和实现必须分中类的声明和实现必须分开开。 第三章 Delphi面向对象编程思想3.6.2 类型强制转换操作符类型强制转换操作符as as操作符用于把一个对象变量的类型转换为另一个类的类型,表达式的结果类型是as操作符右端的类的类型。其语法形式为: 对象变量名 as 类名;注意:注意: as操作符只能用于将后代类的实例转换为祖先类的实例,因此,as操作符左边的对象必须满足下列三种情形之一,否则将导致异常:是as操作符右边类类型的实例;是as操作符右边类类型的后代类的实例;值为nil。 上一页上一页返返 回回Delphi面向

73、对象程序设计第四章 Delphi基本组件编程(一)本章内容本章内容VCL的属性、方法和事件窗体(Form)的属性、方法和事件以及窗体的创建Delphi中与面向对象概念相关的几个保留字按钮、标签、文本框等基本VCL组件的应用Delphi面向对象程序设计4.0 VCL的属性、方法和事件的属性、方法和事件 VCL是Delphi的类库,即 Visual Component Library VCL组件采用的是PME(Property/Method/Event) 开发模式,能极大地提高开发效率。第四章 Delphi基本组件编程(一)下一页返回Delphi面向对象程序设计4.0.1 VCL组件的属性组件的属

74、性(Property) 属性是对组件表现形式的描述,包括外观(如大小、位置、颜色等)、标题、可用性、可见性等。 属性大多数既可以在对象观察器窗体中静态设置,也可以在程序中用代码动态设置;也有部分属性之内在对象观察器中静态设置或只能在程序中动态设置。第四章 Delphi基本组件编程(一)下一页返回上一页Delphi面向对象程序设计4.0.1 VCL组件的属性组件的属性(Property) 在对象观察器中的属性分为五种类型: 简单属性、枚举属性、集合属性、编辑属性和复合属性。第四章 Delphi基本组件编程(一)下一页返回上一页Delphi面向对象程序设计4.0.1 VCL组件的属性组件的属性(P

75、roperty) 简单属性只需属性属性值即可,如决定组件大小的Width、Height属性,决定组件位置的Top、Left属性等。其对应数据类型为Object Pascal语言本身的标准数据类型。第四章 Delphi基本组件编程(一)下一页返回上一页Delphi面向对象程序设计4.0.1 VCL组件的属性组件的属性(Property) 枚举属性将所有的取值罗列出来供选择,其属性值包含在一个组合框中,如决定决定窗体状态的WindowState属性,就有wsNormal、wsMaximized、wsMinimized三种取值供选择。其对应数据类型为Object Pascal语言的枚举类型。第四章

76、Delphi基本组件编程(一)下一页返回上一页Delphi面向对象程序设计4.0.1 VCL组件的属性组件的属性(Property) 集合属性的属性值是由多个值构成的集合,如决定窗体标题栏中显示哪些图标的BorderIcons属性,其取值就是:biSystemMenu, biMinimize, biMaximize, biHelp四个值的集合。其对应数据类型为Object Pascal语言的集合类型。第四章 Delphi基本组件编程(一)下一页返回上一页Delphi面向对象程序设计第四章 Delphi基本组件编程(一)4.0.1 VCL组件的属性组件的属性(Property) 编辑属性在对象观

77、察器中有一个 按钮,单击该按钮可以打开一个属性编辑对话框,在该对话框中输入其属性值。例如Memo组件的Lines属性就采用这种方式。下一页返回上一页Delphi面向对象程序设计第四章 Delphi基本组件编程(一)4.0.1 VCL组件的属性组件的属性(Property) 复合属性就是该属性本身由若干子属性构成,例如组件的字体Font属性就是由CharSet、Color、Height、Name、Pitch、Style等多个子属性构成的复合属性。下一页返回上一页Delphi面向对象程序设计第四章 Delphi基本组件编程(一)4.0.2 VCL组件的方法组件的方法(Method) 组件的方法就是

78、组件类声明的过程和函数,它反映了对象的行为。例如窗体类的Show方法可以用来显示一个窗体。调用方法的语法格式为: 组件对象名.方法名(参数)下一页返回上一页Delphi面向对象程序设计第四章 Delphi基本组件编程(一)4.0.3 VCL组件的事件组件的事件(Event) 组件的事件是组件对用户某个动作的响应。事件的响应由Delphi提供的事件出来过程实现。当发生某个特定事件时,就执行相应的事件处理过程代码。 组件对应的事件位于对象观察器的Events选项卡中。下一页返回上一页Delphi面向对象程序设计第四章 Delphi基本组件编程(一)4.1 窗体窗体(Form) 窗体是应用程序与用户

79、进行交互的窗口,是放置组件最常用的容器。下一页返回上一页Delphi面向对象程序设计第四章 Delphi基本组件编程(一)4.1.1 窗体的属性窗体的属性 窗体的属性决定了窗体的大小、位置、风格、标题、名称等特征。常用的有Height、Width、Left、Top、FormStyle、Caption、Name等。下一页返回上一页Delphi面向对象程序设计第四章 Delphi基本组件编程(一)4.1.2 窗体的事件窗体的事件 窗体的事件主要包括建立窗体、激活窗体以及关闭窗体时发生的事件,如OnCreate、OnShow、OnClose等。下一页返回上一页Delphi面向对象程序设计第四章 De

80、lphi基本组件编程(一)4.1.3 窗体的方法窗体的方法 窗体的常用方法如Create、Show、ShowModal、Close等,调用方法时通常会触发相应的事件。下一页返回上一页Delphi面向对象程序设计第四章 Delphi基本组件编程(一)4.1.4 窗体的创建窗体的创建 窗体可以用静态和动态两种方式创建。 静态创建的窗体在程序运行时就已经创建了,当工程中的窗体数目很多时,会浪费系统资源;而动态创建的窗体则是由代码手工创建,窗体使用完毕后再手工释放,从而最多限度地节约系统资源。下一页返回上一页Delphi面向对象程序设计第四章 Delphi基本组件编程(一)4.2 保留字保留字Pare

81、nt、Owner、Sender、Self 一个对象的Parent对象是指包含这个对象的容器对象。 一个对象的Owner属性就是指这个对象的所有者对象。 在事件处理程序参数表中,至少含有一个参数Sender,它代表触发事件处理程序的组件。 Self是指所编写的程序范围是在哪一个类中。下一页返回上一页Delphi面向对象程序设计第四章 Delphi基本组件编程(一)4.3 按钮、标签、文本框的应用按钮、标签、文本框的应用 这些组件位于组件板的Standard页上,使用频率很高。 下一页返回上一页Delphi面向对象程序设计第四章 Delphi基本组件编程(一)4.3.1 按钮按钮(Button)

82、Button组件主要用于用户对程序的控制,是事件驱动模式的最明显的体现。其常用属性如:Caption、Name、Default、ModalResult等;常用事件为OnClick。 下一页返回上一页Delphi面向对象程序设计第四章 Delphi基本组件编程(一)4.3.2 标签标签(Label) 标签是Delphi中最常用的输出静态文本信息的组件,通常作为其它不具备提示信息的文本组件如Edit、Memo等组件的提示文本。常用属性如:Caption、AutoSize等; 下一页返回上一页Delphi面向对象程序设计第四章 Delphi基本组件编程(一)4.3.3 文本框文本框(Edit) 文本

83、框组件主要用于输入单行文字,其常用属性如: Text、PasswordChar、ReadOnly等 ;常用事件如:OnChange、OnKeyPress和OnEnter事件 下一页返回上一页Delphi面向对象程序设计第五章 VCL组件应用本章内容本章内容备注框Memo组件组框GroupBox组件和面板Panel组件复选框CheckBox组件和单选按钮RadioButton组件位图按钮BitBtn组件和加速按钮SpeedButton组件单选按钮组RadioGroup组件Delphi面向对象程序设计5.1 备注框组件备注框组件(Memo) 备注框用于处理多行文本,位于组件板的Standard页中

84、,与Edit组件有很多共同特性,其主要属性如:Lines、CarePos、Modified等,其中Lines属性决定了备注框中的文本。第五章 VCL组件应用下一页返回Delphi面向对象程序设计5.2 组框组框(GroupBox)和面板和面板(Panel)组件组件 这两种组件通常用于作为容器组件来美化界面或将其它组件分组,在其上可以放置其它组件,均位于组件板的Standard页中。第五章 VCL组件应用下一页返回上一页Delphi面向对象程序设计5.3 复选框复选框(CheckBox)和单选按钮和单选按钮(RadioButton) 二者分别用来表示多选和单选两种选择方式,均位于组件板的Stan

85、dard页中。其重要属性主要是Caption和Checked。第五章 VCL组件应用下一页返回上一页Delphi面向对象程序设计5.4 位图按钮位图按钮(BitBtn)和加速按钮和加速按钮(SpeedButton) 位图按钮和Button相似,但其上可以显示小图标,位于组件板的Additional页中。其特有属性如:Glyph、Kind、LayOut等。 加速按钮可成组工作,常用于设计工具栏,位于组件板的Additional页中。第五章 VCL组件应用下一页返回上一页Delphi面向对象程序设计5.5 单选按钮组单选按钮组(RadioGroup) 单选按钮组相当于GroupBox组件和一组Ra

86、dioButton组件的组合,位于组件板的Standard页中。其重要属性如:Items、ItemIndex、Columns、Caption等 。第五章 VCL组件应用下一页返回上一页Delphi面向对象程序设计第六章 VCL组件应用 (续一)本章内容本章内容形状Shape组件列表框ListBox组件和下拉列表框ComboBox组件计时器Timer组件Delphi面向对象程序设计6.1 形状组件形状组件(Shape) 形状组件用于绘制简单几何图形,如矩形、圆、椭圆、正方形等,位于组件板的Additional页中,其最重要的属性莫过于Shape属性了,它决定了Shape组件的形状;另外Brush

87、和Pen属性分别决定了形状的填充效果和边界效果。第六章 VCL组件应用 (续一)下一页返回Delphi面向对象程序设计6.2 列表框列表框(ListBox)和下拉列表框和下拉列表框(ComboBox)组件组件 列表框和下列列表框组件均可提供取值列表供选择,位于组件面板的Standard页。只是列表框只供选择,而组合框相当于Edit组件和ListBox的组合。列表内容由Items属性决定;下拉列表框的样式由Style属性决定。第六章 VCL组件应用 (续一)下一页返回上一页Delphi面向对象程序设计6.3 计时器组件计时器组件(Timer) Timer组件可以使程序每隔一定时间自动执行某一个动

88、作,它会在指定的时间间隔频繁触发OnTimer事件,使得该事件代码循环执行。Timer组件位于组件板的System页上 ,其主要属性为InterVal和Enabled,只有一个OnTimer事件。第六章 VCL组件应用 (续一)返回上一页Delphi面向对象程序设计第七章 异常处理与程序调试技术本章内容本章内容异常的概念异常的响应方法自定义异常程序调试方法Delphi面向对象程序设计7.1 异常的概念异常的概念 所谓异常,是指程序在运行时遇到的一些无法预知,需要特别处理的状况。例如程序要打开一个不存在的文件、网络连接中断、操作数越界、装载一个不存在的类等问题。 Delphi提供了一套缺省的自动

89、异常处理机制,即当程序发生错误后会自动退出当前运行的程序模块,并以对话框的形式给出相应的错误信息,但是并不会引起应用程序的非法终止。 第七章 异常处理与程序调试技术下一页返回Delphi面向对象程序设计7.1 异常的概念异常的概念 Delphi的异常处理机制是建立在保护块的概念上的。保护块是用保留字try和end封装起来的一段代码。当应用程序发生错误时,系统会自动创建相应的异常类的对象,该异常对象通常包含了错误的相关信息。程序可以捕获并处理这个异常对象,如果程序中没有定义对该异常的处理,则系统会自动产生一个消息框来描述这个错误,并保证程序不会非法终止。 第七章 异常处理与程序调试技术下一页返回

90、上一页Delphi面向对象程序设计7.1 异常的概念异常的概念 在Delphi中,所有的异常类都派生自Exception类,该类是在SysUtils单元中定义的,如果一个程序的Uses语句中包含了SysUtils单元,则运行中发生错误时就会引发一个异常。 需要注意的是,异常不同错误于,我们完全可以自己引发一个异常,如下面的语句: Raise Exception.Create(My Error); 第七章 异常处理与程序调试技术下一页返回上一页Delphi面向对象程序设计7.2 异常的响应方法异常的响应方法7.2.1 tryexceptend tryexceptend形成了一个异常响应保护块。正

91、常情况下except后面的语句并不会被执行,而当一条或多条try块中的语句执行失败时,异常发生了,程序自动跳到except块中,进入异常响应处理模块中去执行。当异常被响应后异常类自动清除。第七章 异常处理与程序调试技术下一页返回上一页Delphi面向对象程序设计7.2 异常的响应方法异常的响应方法7.2.2 tryexcept ondo end 该异常响应保护块通过使用ondo来响应不同类型的异常,其中on之后为异常的类型。 如下面的例子:第七章 异常处理与程序调试技术下一页返回上一页Delphi面向对象程序设计varI,J,K:Integer;begin Try I:=StrToInt(Ed

92、it1.Text); J:=StrToInt(Edit2.Text); K:=I div J; Edit3.Text:=IntToStr(K); Except On EDivByZero do ShowMessage(除数为除数为0!); On EConvertError do ShowMessage(数据类型错误!数据类型错误!); end;end; 第七章 异常处理与程序调试技术下一页返回上一页Delphi面向对象程序设计7.2 异常的响应方法异常的响应方法7.2.3 tryfinally end 显示错误消息是异常处理的一个方面,当错误发生时,还应该保证系统的稳定,如:及时释放已经分配的

93、资源,避免系统的崩溃等,这就可以采用tryfinally end结构来实现。Finally之后的语句无论如何都会被执行,因此可以用于资源保护。 如下面的例子:第七章 异常处理与程序调试技术下一页返回上一页Delphi面向对象程序设计var P:Pointer; I,J:integer;Begin I:=0; GetMem(P,2048); J:=5 div I; FreeMem(P,2048);End; 第七章 异常处理与程序调试技术下一页返回上一页Delphi面向对象程序设计var P:Pointer; I,J:integer;Begin I:=0; GetMem(P,2048); Try

94、J:=5 div I; Finally FreeMem(P,2048); End;End; 第七章 异常处理与程序调试技术下一页返回上一页Delphi面向对象程序设计7.2 异常的响应方法异常的响应方法7.2.4 资源保护与异常处理的结合资源保护与异常处理的结合 发生异常时,既要保证资源释放,又要在当前程序块中处理它,就需要用tryexcept和tryfinally的嵌套 如下面的例子:第七章 异常处理与程序调试技术下一页返回上一页Delphi面向对象程序设计var I,j,k:integer; P:Pointer;begin I:=0;J:=10; GetMem(P,4096); try t

95、ry K:=J div I; ShowMessage(K=+IntToStr(K); except ShowMessage(Divide by zero); end; finally FreeMem(P,4096); ShowMessage(Memory has been Freed); end;end;第七章 异常处理与程序调试技术下一页返回上一页Delphi面向对象程序设计7.3 自定义异常自定义异常 自定义异常同定义新的类相似,只是Delphi中异常的基类是Exception类,因此,自定义异常的语法通常如下: type 异常类名=class(Exception) 要引发该异常,可以使用

96、如下方法: Raise 异常类对象名(参数);第七章 异常处理与程序调试技术下一页返回上一页Delphi面向对象程序设计7.4 程序调试方法程序调试方法7.4.1 程序中的错误程序中的错误 程序中的错误基本上可以分成三类:语法错误、运行时错误和逻辑错误。 语法错误语法错误:语句不符合语法规范。如:begin和end不匹配、句末漏掉分号、标识符未声明、数据类型不符等。 运行时错误运行时错误:程序通过编译,但执行时发生错误。如:试图打开一个不存在的文件、被0除等。程序执行到该语句时,Delphi的集成调试环境会自动停止程序执行,并显示错误信息对话框。单击对话框中的OK按钮后,系统便回到源程序中出错

97、的地方。 逻辑错误逻辑错误:程序可以通过编译并运行,但结果和期望不同。第七章 异常处理与程序调试技术下一页返回上一页Delphi面向对象程序设计7.4 程序调试方法程序调试方法7.4.2 程序运行方式程序运行方式 RUN:单击Run/Run菜单项或工具栏上的运行按钮或快捷键F9。这时,系统会自动编译该程序。如果程序中没有语法错误,则执行该程序。 Compile:选择Project/Compile菜单项,编译程序会编译包括.dpr在内的全部改动过的文件,并生成.exe文件,但不会运行程序。如果程序中有语法错误,编译程序就能找出来。 Build:选择Project/Build菜单项,编译程序会编译

98、项目中的所有文件,无论它们是否被改动。 Project/Compile All Projects和和Project/Build All Projects:在使用项目组的时候使用,编译项目组中的所有项目。第七章 异常处理与程序调试技术下一页返回上一页Delphi面向对象程序设计7.4 程序调试方法程序调试方法7.4.3 断点的使用断点的使用 断点必须设置在可执行语句上,程序运行到断点时会自动停下,回到调试监控模式,此时断点处的语句还没有被执行。可以用单步执行的方式观测各变量的值,从而检查程序的出错点的位置。 设置方法:用鼠标单击希望设断点的行的左侧。第七章 异常处理与程序调试技术下一页返回上一页

99、Delphi面向对象程序设计7.4 程序调试方法程序调试方法7.4.4 单步调试单步调试 常用的单步调试方法如下: Trace Into:当程序运行到调用自定义函数、过程时,Trace Into方式会进入到子程序内部进行跟踪,并停留在子程序的第一行代码处。当程序执行到子程序的结束处时,就返回主程序中。但是,这种方法不会进入Delphi提供的库函数内部进行跟踪。使用方法是按F7键。 Step Over:每次只执行一行程序,当遇到自定义函数或过程的调用时,不会进入函数进行进一步的跟踪,而是直接把函数执行完毕,再停在程序的下一行。如果我们能够确信自定义的函数没错时,使用Step Over方法比Tra

100、ce Into方法更能简化调试工作。使用方法是按F8键。 第七章 异常处理与程序调试技术下一页返回上一页Delphi面向对象程序设计7.4 程序调试方法程序调试方法7.4.4 观察窗观察窗(WatchList) 观察窗是监控程序执行最有效的工具之一,利用它和前面的各种执行方式相配合,可以检测各个变量及表达式在程序执行的某个阶段的值。第七章 异常处理与程序调试技术返回上一页Delphi面向对象程序设计第八章 VCL组件应用 (续二)本章内容本章内容树状视图组件TreeView列表视图组件ListView跟踪条组件TrackBar和进度条组件ProgressBarTab组件TabControl和多

101、页面组件PageControlDelphi面向对象程序设计8.1 树状视图组件树状视图组件(TreeView) TreeView组件位于组件板的Win32页上,它将列表内容分级显示,呈树状结构。在树状结构的列表中有一系列节点和子节点,可以将节点展开或折叠。 Windows资源管理器窗口中就以树状视图的形式显示出了系统目录。 TreeView组件最重要的属性是Items属性,它决定了列表中的内容第八章 VCL组件应用 (续二)下一页返回Delphi面向对象程序设计8.2 列表视图组件列表视图组件(ListView) 列表视图组件ListView位于组件板的Win32页上,与列表框组件ListBo

102、x非常相似。不同的是,列表视图组件可以让用户选择不同的显示方式,如:大图标方式、小图标方式、列表方式和详细资料方式等。Windows操作系统的资源管理器的左边是一个TreeView组件,而右边就是一个典型的ListView组件。 ListView组件中显示的项目由Items属性来设置,其显示方式则由ViewStyle属性来确定。 第八章 VCL组件应用 (续二)下一页返回上一页Delphi面向对象程序设计8.3 跟踪条组件跟踪条组件(TrackBar)和进度条组件和进度条组件(ProgressBar) TrackBar组件和ProgressBar组件位于组件板的Win32页,都可以用来指示一个

103、区域或范围中的位置,它们有很多相似的属性、方法和事件,如属性:Max、Min、Orientation、Positiond等;TrackBar最常用的事件是OnChange;ProgressBar最常用的方法是StepIt和StepBy 。第八章 VCL组件应用 (续二)下一页返回上一页Delphi面向对象程序设计8.4 Tab组件组件(TabControl)和多页面组件和多页面组件(PageControl) TabControl和PageControl均位于组件板的Win32页,这两个组件在外观上非常相似,但却有质的区别。两者都是由多个标签页组成,但PageControl组件每一个标签对应一个

104、单独的页面,每个页面上可以放置不同的控件;而TabControl组件的多个标签对应的是相同的页面,也就是说只有一个页面,通过标签的变化来改变这个页面上控件的状态。第八章 VCL组件应用 (续二)下一页返回上一页Delphi面向对象程序设计第九章 对话框本章内容本章内容对话框函数和过程公用对话框系统提供的About窗体自定义对话框Delphi面向对象程序设计9.1 对话框函数和过程对话框函数和过程 在Windows程序设计中,对话框常用于应用程序和用户之间的信息交换。在Delphi中,系统提供了一系列对话框函数和过程可以很方便地实现对话框功能。 第九章 对话框下一页返回Delphi面向对象程序设

105、计9.1.1 ShowMessage过程过程 ShowMessage过程可以显示一个带有“OK”按钮的简单对话框,其语法格式为: procedure ShowMessage(const Msg: string);第九章 对话框下一页返回上一页Delphi面向对象程序设计9.1.2 ShowMessageFmt过程过程 ShowMessageFmt过程的作用与ShowMessage基本相同,但可以以特定的格式显示文本,其语法格式为: procedure ShowMessageFmt(const Msg: string; Params: array of const); 其中,Msg参数是格式化字

106、符串,与ShowMessage过程相同,其内容将显示在对话框中。Params参数提供了与Msg参数中格式符相匹配的内容。例如: ShowMessageFmt(%s同学的正确答题数为同学的正确答题数为%d, 张三张三,20);第九章 对话框下一页返回上一页Delphi面向对象程序设计9.1.3 ShowMessagePos过程过程 ShowMessagePos过程的作用与ShowMessage大致相同,但是可以指定对话框的显示位置。语法格式为: procedure ShowMessagePos(const Msg: string; X, Y: Integer); 其中,Msg参数为对话框中要显示

107、的文本内容,两个整形参数X和Y用于指定对话框在屏幕中的显示位置。第九章 对话框下一页返回上一页Delphi面向对象程序设计9.1.4 MessageDlg函数函数 MessageDlg函数的作用是在屏幕中央显示一个消息对话框。其语法格式为: function MessageDlg(const Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint): Word;其中:Msg参数为对话框中要显示的文本内容。DlgType参数用于指定对话框的类型。Buttons参数用于指定对话框中要显示的按钮。 最终

108、,MessageDlg函数将根据用户所单击的按钮,返回相应的Word类型的值。 第九章 对话框下一页返回上一页Delphi面向对象程序设计9.1.5 MessageDlgPos函数函数 MessageDlgPos函数用于在屏幕指定位置显示一个对话框。其语法格式为: function MessageDlgPos(const Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint; X, Y: Integer): Word; 其中的参数与MessageDlg函数大多相同,参数X和Y用于指定对话框在屏幕

109、中的显示位置。如果赋值为1,将显示在屏幕中央。第九章 对话框下一页返回上一页Delphi面向对象程序设计9.1.6 InputBox函数函数 InputBox函数用于显示一个供用户输入字符串型、Double型或Integer型数据的对话框。其语法格式为: function InputBox(const ACaption, APrompt, ADefault: string): string;其中:ACaption参数用于指定对话框的标题APrompt参数用于指定对话框中要显示的文本内容,通常是提示信息,该参数中可以使用硬回车符来换行。ADefault参数用于指定显示在输入编辑框中的默认文本。该

110、函数的返回值为String类型。第九章 对话框下一页返回上一页Delphi面向对象程序设计9.1.7 InputQuery函数函数 InputQuery函数用于显示一个供用户输入字符串、双精度数或整数的对话框。其语法格式为: function InputQuery(const ACaption, APrompt: string; var Value: string): Boolean;其中,ACaption和APrompt参数的作用与InputBox相同,需要注意的是Value参数。该参数是一个引用参数,因此在使用InputQuery函数时,需要一个string类型的实参变量,该变量的值将作为

111、默认值显示在对话框内的编辑框中,若用户单击“OK”按钮,则输入的值将赋给该变量,并其函数返回True;若用户单击“Cancel”按钮或按下键盘上的“ESC”键,则变量的值保持不变,函数返回False。 第九章 对话框下一页返回上一页Delphi面向对象程序设计9.1.8 MessageBox函数函数 MessageBox函数是TApplication类的一个方法,用于显示一个特定的对话框。其语法格式为: function MessageBox(const Text, Caption: PChar; Flags: Longint = MB_OK): Integer;其中:Text参数是显示在对话

112、框中的文本内容,它可以超过255个字符长度,过长的消息在对话框中会自动换行。Caption参数将显示在对话框的标题中。Flags参数用于指定对话框中要显示的按钮。如果内存不足以生成对话框,则函数返回值为0,否则返回特定的值。 第九章 对话框下一页返回上一页Delphi面向对象程序设计9.2 公用对话框公用对话框 除了利用对话框函数和过程建立对话框之外,在Delphi的VCL面板的Dialogs页中,还提供了一系列标准的Windows公用对话框组件,利用这些组件可以方便地实现打开或者保存文件、设置字体、选择颜色、设置打印选项等多种功能。第九章 对话框下一页返回上一页Delphi面向对象程序设计9

113、.2.1 打开对话框打开对话框(OpenDialog) 打开对话框用于显示一个文件选择与打开的对话框。该组件在运行期间不可见,需要调用其Execute方法来显示。在该对话框中,用户选择了想要打开的文件后,单击对话框中的“打开”按钮,被选中文件的全路径及其名称和扩展名就被存储在该对话框的FileName属性中。 第九章 对话框下一页返回上一页Delphi面向对象程序设计9.2.2 另存为对话框另存为对话框(SaveDialog) 另存为对话框组件用于提供一个标准的另存为对话框。用户在对话框中可以选择要保存的文件名和存储路径。该对话框在运行时不会显示出来,必须调用其Execute方法来显示。用户单

114、击其中的“保存”按钮后,对话框关闭,文件被保存,并且所选文件名及其全路径被存储在FileName属性中。 由于TSaveDialog继承自TOpenDialog,因此,另存为对话框的很多属性和方法与打开对话框相同。 第九章 对话框下一页返回上一页Delphi面向对象程序设计9.2.3 字体对话框字体对话框(FontDialog) 字体对话框组件用于显示一个标准的Windows字体对话框。该对话框在运行时不会显示出来,必须调用其Execute方法。当用户在其中选择了一种字体,并单击“确定”按钮时,对话框关闭,所选字体的相关信息,如字体名称、大小、样式、颜色、效果等,将被赋予对话框的Font属性。

115、第九章 对话框下一页返回上一页Delphi面向对象程序设计9.2.4 颜色对话框颜色对话框(ColorDialog) 颜色对话框组件用于显示一个标准的Windows颜色对话框。该对话框在运行时不会显示出来,必须调用其Execute方法。当用户在其中选择了一种颜色,并单击“确定”按钮时,对话框关闭,所选颜色被赋予对话框的Color属性。第九章 对话框下一页返回上一页Delphi面向对象程序设计9.3 系统提供的系统提供的About窗体窗体 Delphi7中提供了专门的“关于”窗体模板 ,可以利用该模板快速建立“关于”窗体,其本质就是一个窗体。第九章 对话框下一页返回上一页Delphi面向对象程序

116、设计9.4 自定义对话框自定义对话框 所谓自定义对话框,实际上就是自定义的窗体。在该窗体中,可以放置接受用户输入的Edit组件,比较典型的自定义对话框是用于接受输入用户名和密码的对话框。 第九章 对话框返回上一页Delphi面向对象程序设计第十章 菜单和工具栏本章内容本章内容主菜单组件MainMenu弹出式菜单组件PopupMenu工具栏组件ToolBar状态栏组件StatusBar动作对象列表组件ActionListCoolBar组件和ControlBar组件菜单项和工具栏按钮的动态创建Delphi面向对象程序设计10.1 主菜单组件主菜单组件(MainMenu) 主菜单组件位于组件板的St

117、andard页,利用该组件可以很方便地完成菜单设计,只需进入菜单设计器设计所需的菜单项并且编写各个菜单项的OnClick事件代码即可。 其中的每个菜单项都是一个TMenuItem对象。该组件的主要属性是Items,第十章 菜单和工具栏下一页返回Delphi面向对象程序设计10.2 弹出式菜单组件弹出式菜单组件(PopupMenu) PopupMenu组件位于组件板的Standard页,该组件用于建立弹出式快捷菜单。设计方式与MainMenu相同,最后将需要弹出该快捷菜单的组件的PopupMenu属性指定为该PopupMenu组件的组件名即可。 第十章 菜单和工具栏下一页返回上一页Delphi面

118、向对象程序设计10.3 工具栏组件工具栏组件(ToolBar) ToolBar组件位于组件板的Win32页,在窗体上添加ToolBar组件后,默认停靠在窗体客户区的最上端(标题栏和菜单栏的下方),并且宽度会自动适应窗体宽度的改变。 工具栏上可以放置工具栏按钮和其他组件,添加的每一个按钮和分隔都是一个TToolButton对象,可以为每一个TToolButton对象设置属性和编写相应的事件。第十章 菜单和工具栏下一页返回上一页Delphi面向对象程序设计10.4 状态栏组件状态栏组件(StatusBar) 状态栏用于显示程序的操作提示及当前状态等信息,一般位于窗体的底部。 StatusBar组件

119、位于组件板Win32页上,是由若干个Panel组成的,每个Panel就是状态栏的一栏。 其主要属性是Panels属性。第十章 菜单和工具栏下一页返回上一页Delphi面向对象程序设计10.5 动作对象列表组件动作对象列表组件(ActionList) ActionList组件可以集中处理许多常用的操作,把用户界面和应用逻辑分开,减少程序代码的长度,方便程序的维护和调试。它位于组件板Standard页,双击该组件打开动作列表编辑器后就可以设计其中的动作,动作分为自定义的动作和系统预定义的动作。设计完动作列表后,只需将用户界面元素如:菜单项、工具栏按钮等与动作相关联即可。第十章 菜单和工具栏下一页返

120、回上一页Delphi面向对象程序设计10.6 CoolBar组件和组件和ControlBar组件组件 CoolBar和ControlBar组件主要用于容纳诸如ToolBar、ComboBox这样的组件,比较ToolBar来说效果更美观,其中CoolBar位于组件板的Win32页上 ,ControlBar位于组件板的Additional页,二者功能与界面效果相似。第十章 菜单和工具栏下一页返回上一页Delphi面向对象程序设计10.7 动态菜单项和工具栏按钮动态菜单项和工具栏按钮 基本方法是:动态生成TMenuItem类和TToolButton类的实例;动态设置这些对象实例的相关属性,在代码中动

121、态设置这些菜单项和工具栏按钮的OnClick事件过程。把动态生成的TMenuItem和TToolButton的实例添加到相应的菜单和工具栏显示。第十章 菜单和工具栏返回上一页Delphi面向对象程序设计第十一章 文件操作和管理本章内容本章内容文件系统组件和外壳(Shell)组件文本文件有类型文件无类型文件文件流(FileStream)对象的操作注册表读写操作Delphi面向对象程序设计11.1 文件系统组件和外壳文件系统组件和外壳(Shell)组件组件 Win31页上的文件系统组件和Samples页上的外壳(Shell)组件可以实现文件管理的功能,能够对驱动器、目录和文件列表进行显示和操作,类

122、似于Windows的资源管理器 。 第十一章 文件操作和管理下一页返回Delphi面向对象程序设计11.1.1 文件系统组件文件系统组件 文件系统组件包括驱动器下拉列表框组件DriveComboBox、目录列表框组件DirectoryListBox、文件列表框组件FileListBox和文件类型过滤下拉列表框FilterComboBox等四个组件,这四个组件相互关联,通常只需要设置它们的关联属性即可。DriveComboBox组件的DirList属性设置为窗体上的 DirectoryListBox组件DirectoryListBox组件的FileList属性设置为窗体上的FileListBox

123、组件FilterComboBox组件的FileList属性设置为窗体上的FileListBox组件FileListBox组件的FileEdit属性设置为窗体上的Edit组件第十一章 文件操作和管理下一页返回上一页Delphi面向对象程序设计11.1.2 外壳外壳(Shell)组件组件 外壳组件包括ShellTreeView、ShellComboBox和ShellListView三个组件,与文件系统组件相同,这三个组件相互关联,通常只需要设置它们的关联属性即可。设置ShellComboBox组件的ShellTreeView和ShellListView属性分别为另外两个组件;设置ShellTree

124、View组件的ShellComboBox和ShellListView属性分别为另外两个组件;设置ShellListView组件的ShellComboBox和ShellTreeView属性分别为另外两个组件;第十一章 文件操作和管理下一页返回上一页Delphi面向对象程序设计11.2 文本文件文本文件 文本文件是以行为单位进行读、写操作的。由于每一行长度不一定相同,不能计算出给定行在文件中的确切位置,只能顺序地读写。而且文本文件只能单独为读或写而打开,在一个打开的文本文件上同时进行读、写操作是不允许的。 文本文件类型的变量声明格式如下: var f:TextFile; 第十一章 文件操作和管理下

125、一页返回上一页Delphi面向对象程序设计第十一章 文件操作和管理下一页返回上一页11.2 文本文件文本文件Delphi中对文本文件的处理步骤可以归纳为以下五个过程:声明文本文件变量,如:var f:TextFile;将文件变量与指定的磁盘文件链接:Assign(f,FileName);打开文件,打开文件有三种方式:只读打开,用Reset过程打开一个已经存在的文件,如:Reset(f);新建打开,用Rewrite过程新建一个文件,如果文件已经存在则被清空为0字节,如:Rewrite(f);追加打开,用Append过程打开一个已存在的文件并把文件指针定位到文件的末尾,如:Append(f);读写

126、文件:Read、Write、Readln、Writeln 关闭文件,用CloseFile函数关闭一个打开的文件,如: CloseFile(f);Delphi面向对象程序设计11.3 有类型文件有类型文件 有类型文件是一种具有一定数据类型的文件,它是由指定数据组成,读写过程所操作对象的单位是一个指定类型的数据。例如,我们可以这样定义一个整数文件类型的变量: var f:File of Integer; 在Delphi中我们经常使用的有类型文件是记录类型文件。 第十一章 文件操作和管理下一页返回上一页Delphi面向对象程序设计11.3 有类型文件有类型文件 对于有类型文件的操作,Readln和W

127、riteln函数是不能使用的,所以我们要使用Read和Write函数来读写文件。另外,在有类型文件中经常使用的标准函数和过程是FilePos和Seek。 注意,对于记录类型文件来说,FilePos函数返回的是当前记录的序号,Seek过程中的第二个参数也是要搜索的记录序号,都不是绝对位置的字节数。 第十一章 文件操作和管理下一页返回上一页Delphi面向对象程序设计11.4 无类型文件无类型文件 无类型文件中存储的数据是没有类型的,所以读写无类型文件需以字节为单位。使用Reset过程打开文件时,需要指定每次读写的字节数,默认为128字节,例如下面的代码: var f:File; /定义无类型文件

128、变量 Reset(f,ByteNum); 如果Reset省略第二个参数,则对无类型文件每次读写操作以128个字节为单位。 无类型文件的读写操作使用的是BlockRead和BlockWrite标准过程: procedure BlockRead(var F: File; var Buf; Count: Integer ; var AmtTransferred: Integer); procedure BlockWrite(var f: File; var Buf; Count: Integer ; var AmtTransferred: Integer);其中,Buf是任意类型的缓冲区,Count

129、是读写次数,即一次读写几个单位 第十一章 文件操作和管理下一页返回上一页Delphi面向对象程序设计11.5 文件流文件流(FileStrem) 对象的操作对象的操作 文件流对象属于TFileStream类,由TFileStream类的构造方法Create创建,使用完毕后由Free方法释放,其构造方法为: constructor Create(const FileName: string; Mode: Word); overload;其中,参数FileName为文件名, Mode表示打开文件方式; 文件流对象的读写操作方法主要利用Read和Write函数。 第十一章 文件操作和管理下一页返回上

130、一页Delphi面向对象程序设计11.6 注册表读写注册表读写 注册表是Windows操作系统中最重要的存放系统和应用程序各种配置的一个特殊文件,如果要修改操作系统的某些属性或者保存应用程序诸如安装路径、启动配置等信息,就涉及到对注册表进行操作;也有很多应用程序利用注册表实现程序的注册机制。 Delphi提供了一个专门的类TRegistry来操作注册表,利用TRegistry类的属性和方法可以很方便地对繁杂的系统注册表进行查询、读写等操作。 第十一章 文件操作和管理下一页返回上一页Delphi面向对象程序设计11.6 注册表读写注册表读写在Delphi中操作注册表一般分为以下几个环节:创建注册

131、表类TRegistry的实例对象;指定根键(RootKey),即设定TRegistry类的RootKey属性的值。例如: reg. RootKey:=HKEY_CURRENT_USER;指定要操作的主键或创建主键。利用TRegistry的OpenKey方法和CreateKey方法,例如: reg.CreateKey(SoftwareMyDelphiProgram); reg.OpenKey(SoftwareMyDelphiProgram,False);关闭当前主键。如:reg.CloseKey;读写注册表键值信息。主要使用TRegistry类的Read系列和Write系列方法。释放创建的TRe

132、gistry对象。如:reg.Free;第十一章 文件操作和管理返回上一页Delphi面向对象程序设计第十二章 图形图像和多媒体技术本章内容本章内容画布对象(TCanvas)图像编程技术多媒体编程技术Delphi面向对象程序设计12.1 画布对象画布对象(TCanvas) 画布对象是一个用于绘图的表面,在这个区域上,程序可实现各种绘图功能,很多组件(如Image,Memo)以及窗体Form的Canvas属性就是TCanvas对象。在组件或窗体上绘制图形就是在组件的画布上绘制。TCanvas对象的Brush,Pen,Font属性分别是TBrush,TPen,TFont对象,它们用于定制绘制图形的

133、风格。第十二章 图形图像和多媒体技术下一页返回Delphi面向对象程序设计12.1.1 画布对象画布对象(TCanvas)TCanvas对象有很多方法,可完成常用的绘图功能:画线: LineTo(x,y : Integer); MoveTo(x,y : Integer);画矩形:Rectangle(x1,y1,x2,y2 : Integer);画圆或椭圆:Ellipse(x1,y1,x2,y2 : Integer);画弧线:Arc(x1,y1,x2,y2,x3,y3,x4,y4 : Integer);画圆角矩形:RoundRect(x1,y1,x2,y2,x3,y3:Integer);画图像的

134、方法:Draw(x,y : Integer;Graphic : TGraphic); StretchDraw(Const Rect : TRect : Graphic : TGraphic);第十二章 图形图像和多媒体技术下一页返回Delphi面向对象程序设计12.1.2 TPen和和TBrush对象对象 TCanvas对象的Pen和Brush属性其实也是对象。 应用程序常用画笔对象TPen在画布上绘制各种线段,画笔颜色在Color属性中定义,线段宽度在Width属性中定义,Style属性定义了线段类型; 画刷对象TBrush用以填充图形,画刷的颜色定义在Color属性中。画刷还有一个运行期属

135、性Bitmap,可使用位图填充图形以产生特殊效果,位图大小为8个象素点高,8个象素点宽,Style属性定义了画刷填充图形的风格。 第十二章 图形图像和多媒体技术下一页返回Delphi面向对象程序设计12.2 图像编程技术图像编程技术 在这一节主要探讨Delphi编程中不同格式图像的显示和转换问题,Delphi中的Image组件支持的图像格式有限,所以在编程中我们有时会采取生成图像对象的方法来显示图像以及处理图像格式的转换问题。第十二章 图形图像和多媒体技术下一页返回上一页Delphi面向对象程序设计12.2.1 图像组件图像组件(Image) Image组件主要用于在程序中显示图像,它位于组件

136、面板的Additional页,其中显示的图像文件名由Picture属性决定,Transparent属性决定图像背景是否透明,它可以显示的图片种类有JPG、BMP、ICO、EMF和WMF等,但是要显示JPEG格式的图像,必须在程序中包含JPEG单元,也就是在代码中加入:Uses JPEG;第十二章 图形图像和多媒体技术下一页返回上一页Delphi面向对象程序设计12.3 多媒体编程技术多媒体编程技术 Delphi中的多媒体编程主要是通过动画组件Animate和多媒体组件MediaPlayer来实现的,这两个组件分别支持动画文件和电影、CD、声音、MIDI音乐等媒体文件的播放。Delphi本身的组

137、件还不能支持流行的RM格式和MP3格式的媒体文件的播放。第十二章 图形图像和多媒体技术下一页返回上一页Delphi面向对象程序设计12.3.1 动画组件动画组件(Animate) 动画组件Animate位于组件面板的Win32页 上 , 其 主 要 属 性 为 FileName、 Active、Transparent、Repetitions等,常用方法为Play和Stop。 第十二章 图形图像和多媒体技术下一页返回上一页Delphi面向对象程序设计12.3.2 多媒体播放组件多媒体播放组件 (MediaPlayer) MediaPlayer组件提供了一系列按钮用于控制诸如CDROM、MIDI、

138、VCR等多媒体设备,这些多媒体设备可以是硬件也可以是软件。MediaPlayer组件不仅可以播放AVI文件,还可以播放很多媒体文件,比如WAV、MIDI、CD音乐文件和DAT文件。它位于组件面板的System页中。使用时,只需设置其FileName属性指定要播放的文件名即可播放文件,另外也提供了很多属性和方法来实现更多的控制。 第十二章 图形图像和多媒体技术下一页返回上一页Delphi面向对象程序设计12.3.2 多媒体播放组件多媒体播放组件 (MediaPlayer) MediaPlayer组件提供了一系列按钮用于控制诸如CDROM、MIDI、VCR等多媒体设备,这些多媒体设备可以是硬件也可

139、以是软件。MediaPlayer组件不仅可以播放AVI文件,还可以播放很多媒体文件,比如WAV、MIDI、CD音乐文件和DAT文件。它位于组件面板的System页中。使用时,只需设置其FileName属性指定要播放的文件名即可播放文件,另外也提供了很多属性和方法来实现更多的控制。 第十二章 图形图像和多媒体技术下一页返回上一页Delphi面向对象程序设计第十三章 数据库编程本章内容本章内容Delphi自带数据库的使用利用Form Wizard进行简单数据库应用程序开发基于BDE的数据库应用程序开发基于ADO的数据库应用程序开发基于dbExpress的数据库应用程序开发Delphi面向对象程序设

140、计13.1.1 Delphi自带数据库自带数据库 Delphi包含一个桌面数据库工具Database Desktop,利用它可以创建基于文件的数据库系统(如dBase、Paradox、Foxpro等)。 可以选择“Database Desktop”菜单项启动该工具。第十三章 数据库编程下一页返回Delphi面向对象程序设计13.2 Form Wizard Delphi中提供了一个简单的数据库应用程序向导,即Form Wizard。 利用该向导,可以创建一个简单的数据库应用程序,实现数据的浏览和简单操作。在该向导中可以选择数据集为Table或者Query、建立单窗体或者主/从窗体,还可以选择窗体

141、的布局方式。第十三章 数据库编程下一页返回Delphi面向对象程序设计13.3 基于基于BDE的数据库应用程序开发的数据库应用程序开发 13.3.1 BDE(Borland Database Engine) 是Borland公司开发的数据库引擎,用于操作不同的数据库驱动程序。开发人员只需要以统一的方式和数据库引擎建立联系,就能访问不同的数据库。可以大大简化数据库应用程序的开发。 在使用前,需要在BDE Administrator中配置BDE,建立数据库别名。第十三章 数据库编程下一页返回Delphi面向对象程序设计13.3 基于基于BDE的数据库应用程序开发的数据库应用程序开发 13.3.2

142、基于BDE的数据库应用程序结构 第十三章 数据库编程下一页返回上一页数据控制组件(DBGrid、DBEdit等)数据源组件(DataSource)数据集组件(Table、Query等)BDEDBDelphi面向对象程序设计13.3 基于基于BDE的数据库应用程序开发的数据库应用程序开发 13.3.3 利用Table组件开发(1) 1.使用Table、DataSource、DBGrid Table作为数据集组件,其作用是连接数据库中的一张表,因此,需要依次设置其DatabaseName属性(BDE中的别名)、TableName属性; DataSource是数据源组件,通常需要设置其DataSet

143、属性; DBGrid为数据显示组件,通常需要设置其DataSource属性。 例13-1和例13-2第十三章 数据库编程下一页返回上一页Delphi面向对象程序设计13.3 基于基于BDE的数据库应用程序开发的数据库应用程序开发 13.3.4 利用Table组件开发(2) 除了直接利用组件访问数据库,实现数据的基本浏览和操纵功能,还可以利用Table组件提供的相关方法。 例13-3、13-4、13-5、13-6、13-7第十三章 数据库编程下一页返回上一页Delphi面向对象程序设计13.3 基于基于BDE的数据库应用程序开发的数据库应用程序开发 13.3.5 利用Query组件开发(1) Q

144、uery组件的作用是使用SQL命令对数据库进行访问。它也属于数据集组件,通常需要设置其DatabaseName属性和SQL属性。 SQL属性的设置可以在设计期间在对象观察器中进行设置,也可以在代码中动态设置。 例13-9第十三章 数据库编程下一页返回上一页Delphi面向对象程序设计13.3 基于基于BDE的数据库应用程序开发的数据库应用程序开发 13.3.6 利用Query组件开发(2) 在代码中对Query的SQL进行动态编程通常需要如下步骤: Query1.Close; Query1.SQL.Clear; Query1.SQL.Add(此处为SQL语句); Query1.Open/Exe

145、cSQL;其中,SQL命令有返回结果集就使用Open方法打开数据集,否则使用ExecSQL方法。 例13-10、13-11第十三章 数据库编程下一页返回上一页Delphi面向对象程序设计13.3 基于基于BDE的数据库应用程序开发的数据库应用程序开发 13.3.7 利用Query组件开发(3) 如果Query执行的SQL命令中包含参数,则使用“:参数名”的形式。 然后使用ParamByName或者Params方式为参数赋值。 例13-12第十三章 数据库编程下一页返回上一页Delphi面向对象程序设计13.4 基于基于ADO的数据库应用程序开发的数据库应用程序开发 基于基于ADOADO的数据库

146、应用程序开发的常用步骤如的数据库应用程序开发的常用步骤如下:下: 1. 1.利用利用ADOConnection组件建立与数据库的连组件建立与数据库的连接;接; 2. 2.设置设置ADO的数据集组件,如的数据集组件,如ADOTable、ADOQuery等,用于从数据库中引入数据;等,用于从数据库中引入数据; 3. 3.设置设置DataSource组件作为数据集组件和数据组件作为数据集组件和数据访问组件之间的桥梁;访问组件之间的桥梁; 4. 4.利用数据访问组件或其他组件设计用户界面。利用数据访问组件或其他组件设计用户界面。 例13-13第十三章 数据库编程下一页返回上一页Delphi面向对象程序

147、设计13.5 基于基于dbExpress的数据库应用程序开发的数据库应用程序开发 基于基于dbExpressdbExpress的数据库应用程序开发的常用步骤如下:的数据库应用程序开发的常用步骤如下: 1. 1.利用利用SQLConnection组件建立与数据库的连接;组件建立与数据库的连接; 2. 2.设置设置SQLDataSet等数据集组件,用于从数据库中引入等数据集组件,用于从数据库中引入数据;数据; 3. 3.设置设置DataSetProvider组件的组件的DataSet属性为属性为SQLDataSet;设置设置ClientDataSet的的ProviderName属性;以此获得本地数属性;以此获得本地数据集。据集。 4. 4.设置设置DataSource组件作为数据集组件和数据访问组件组件作为数据集组件和数据访问组件之间的桥梁;之间的桥梁; 4. 4.利用数据访问组件或其他组件设计用户界面。利用数据访问组件或其他组件设计用户界面。 例13-14第十三章 数据库编程下一页返回上一页

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号