【文档说明】高教类课件:Delphi面向对象程序设计.ppt,共(216)页,2.463 MB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-44852.html
以下为本文档部分文字说明:
Delphi面向对象程序设计Delphi面向对象程序设计第一章Delphi基础知识•本章内容Borland公司和Delphi的传奇历史编程思想和编程工具的辩证关系Delphi7的集成开发环境Delphi编程的一般方法和步骤Delphi工程、窗体和单元文件Delphi面向对象程序
设计1.0Borland公司和Delphi的传奇历史创始人:•NiklausWirth与Borland并无直接关系,是他发明了Pascal语言。PhillipeKahn也是他的学生。Delphi语言的演变过程是:Pascal、ObjectPascal、Delphi。NiklausWirth在1
984年获得计算机科学领域最高奖:图灵奖第一章Delphi基础知识下一页返回Delphi面向对象程序设计第一章Delphi基础知识1.0Borland公司和Delphi的传奇历史创始人:•菲力浦·凯恩(PhillipeKahn)是NiklausWirth的
学生。在美国加利福尼亚州创建了Borland国际。当时就买出了100多万份Pascal拷贝。在C语言问世前,Pascal是风靡全球,最受欢迎的语言之一,创下了发行拷贝数最多的世界纪录。下一页上一页返回Delphi面
向对象程序设计1.0Borland公司和Delphi的传奇历史创始人:AndersHejlsberg是Borland所有Pascal编译器的架构师,Delphi前3个版本的架构师,C#的设计者,.Net的架构师。推荐书籍:Borland传奇--李维著第一章Delphi基础知识返回上一页
下一页Delphi面向对象程序设计1.1编程思想与编程工具的辩证关系开发工具之于程序员如同剑之于剑客,而程序员的“剑招”就是自身的编程修养、思想、理念等。只有扎扎实实地打好基础,具备良好的编程思想,才能体会“一剑西来,天外飞仙”的酣畅淋漓。第一章Delphi基础知识返回上一页下一页D
elphi面向对象程序设计第一章Delphi基础知识1.2Delphi7的集成开发环境下一页返回上一页Delphi面向对象程序设计第一章Delphi基础知识1.2Delphi7的集成开发环境代码洞察(CodeInsight)技术:
代码完善(CodeCompletion)代码参数提示(CodeParameters)代码模板专家(CodeTemplates)符号洞察(TooltipSymbolInsight)返回上一页下一页Delphi
面向对象程序设计第一章Delphi基础知识1.3Delphi编程的一般方法和步骤控制台应用程序可视化应用程序组件的命名方式:组件前缀+组件功能补充例程:欢迎和时间返回上一页下一页Delphi面向对象程序设计第一章Delphi基
础知识1.4Delphi工程、窗体和单元文件Delphi的工程文件:扩展名为.dpr,是整个应用程序的主程序。Delphi的窗体文件:扩展名为.dfm,保存了窗体上各个对象(包括窗体本身)的属性设置,可以以窗体和文本两种方式打开。Delphi的单元
文件:扩展名为.pas,一个工程中可以包含若干单元,一个窗体文件对应一个单元文件,但是也可以有没有窗体的单元文件。返回上一页下一页Delphi面向对象程序设计工程文件的组成•programPHello;•uses•Forms
,•UMainin'UMain.pas'{frmHello};//单元模块说明•{$R*.res}•begin//主程序开始•Application.Initialize;•Application.Cr
eateForm(TfrmHello,frmHello);•//创建主窗体•Application.Run;//启动主程序,将控制权交给主窗体•end.//主程序结束返回上一页下一页Delphi面向对象程序设计单元文件的组成•unitUMain;//单元名称•interface//接口部分
•uses//引用的外部单元,uses关键字类似于C/C++中的include•Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,Dialogs,StdCtrl
s;•type•TfrmHello=class(TForm)//声明窗体类•btnWelocome:TButton;//窗体类的成员•btnClose:TButton;•edtDisplay:TEdit;•procedurebtnCloseClick(Sen
der:TObject);//成员事件过程的声明•procedurebtnWelocomeClick(Sender:TObject);•procedureFormCreate(Sender:TObject);•private•{Privatedeclarations}•public•
{Publicdeclarations}•end;//类声明结束•var•frmHello:TfrmHello;//声明窗体实例•implementation//实现部分•{$R*.dfm}•procedureTfrmHello.btnCloseClick(Sender:TObject)
;//成员事件过程的实现•begin•Close;•end;•……•end.//单元结束返回上一页Delphi面向对象程序设计Delphi面向对象程序设计第二章ObjectPascal语法基础•本章内容保留字、指令字和标识符注释常量和变
量常用数据类型运算符与表达式语句过程和函数Delphi面向对象程序设计第二章ObjectPascal语法基础2.1保留字、指令符和标识符保留字(ReserveWords)是由系统规定的具有特定意义和
用途的单词,在编程中不能被重新定义或作其它用途。指令符(Directives)也是由系统规定的具有特定意义的单词,但它们可以被重新定义。一旦被重新定义,则在该定义的作用域之内就采用新的含义。保留字和指令符没必要死记
硬背,熟悉后就知道了。下一页返回Delphi面向对象程序设计第二章ObjectPascal语法基础2.1保留字、指令符和标识符标识符(Identifiers)是用来表示常量、变量、属性、对象、类型、过程、函数、单元、对象等语法实体的名称
的符号。ObjectPascal中的标识符的命名规则如下:•标识符可以由字母(A~Z、a~z)、数字(0~9)、下划线组成。•标识符必须由字母或下划线开头。•标识符的长度不应该超过255个字符,如果超过,将只有前255个字符有效。•不能使用保留字作为
自定义标识符,尽量不要使用指令字作为自定义标识符。下一页返回上一页Delphi面向对象程序设计第二章ObjectPascal语法基础2.1保留字、指令符和标识符注意:(1)ObjectPascal中,标识符不区分大小写。(2)在Delphi的库文件中还预先定义了一些标识符,
如标准数学函数Sqrt,Sin,标准数据类型如Boolean、Char等,应尽量避免使用这些标识符作为自定义的标识符,以免引起混淆。(3)使用标识符时,必须先声明再使用,否则编译时,系统会显示错误信息,提示该标识符没有定义。下一页返回
上一页Delphi面向对象程序设计第二章ObjectPascal语法基础2.2注释Delphi中支持三种格式的注释:•大括号:“{”和“}”;•小括号和星号的组合:“(*”和“*)”;•双斜线:“//”。在编写程序的过程中
,应养成良好的注释习惯,以增强程序的可读性。返回上一页下一页Delphi面向对象程序设计第二章ObjectPascal语法基础2.2注释作为良好的编程规范,在程序代码单元文件顶端必须拥有本单元文件的“单元说明”注释。对于常量、结构类型、函数/过程、自定义变量、代码段功能块、关键语句等有含义的代码部
分,必须有注释行进行详细说明。注释行可在需说明部分行后以“//XXXXXXXX”方式添加单行注释,也可在需说明部分行上以“{XXXXXXXX}”方式添加多行。返回上一页下一页Delphi面向对象程序设计第二章ObjectPascal语法基础2.2注释单元头定义,添加到每个单元的
前面。{*****************************************单元名称:功能描述:作者:软件名称:版本:公司名称:刀剑如梦软件创作室************************************
*****}返回上一页下一页Delphi面向对象程序设计第二章ObjectPascal语法基础2.3常量与变量常量在程序运行过程中其值不会改变,可以分为直接常量和符号常量两种。注意:字符常量和字符串常量均以单引号括起来
,如:’a‟,’Hello‟声明符号常量的语法如下:Const<符号常量名1>=<常量值1>;……<符号常量名n>=<常量值n>;返回上一页下一页Delphi面向对象程序设计第二章ObjectPascal语法基础2.3常量与变量变量在程
序运行中其值可以改变。变量有三大要素:变量名、数据类型、变量值变量必须先声明后使用,声明变量的语法如下:var<变量名1>:<数据类型名1>;……<变量名n>:<数据类型名n>;演示:常量和变量的使用返回上一页下一页Delphi面向
对象程序设计第二章ObjectPascal语法基础2.4数据类型数据类型决定了变量的取值范围以及能够参与的运算。ObjectPascal语言是一种“强数据类型”语言。返回上一页下一页Delphi面向对象程序设计第二章ObjectPascal语法基础2.4数据类型简单数据类型字符串型结构类
型指针类型过程类型变体类型整型字符型布尔型枚举型子界型实型集合类型数组类型记录类型文件类型类类型原类类型接口类型有序类型返回上一页下一页Delphi面向对象程序设计第二章ObjectPascal语法基础2.4.1简单数据类型包括整型、
字符型、布尔型、枚举型、子界型和实型。其中,整型、字符型、布尔型、枚举型和子界型这五种被称为有序数据类型(Ordinal)。其中,整型、字符型、布尔型、实型,再加上字符串型是ObjectPascal内部预先定义好的数据类型,
可以直接使用;其它类型必须先作类型定义后才能使用。返回上一页下一页Delphi面向对象程序设计第二章ObjectPascal语法基础2.4.1简单数据类型对于有序数据类型,常用的操作函数如下表所示:函数参数返回值Dec有序类型变量变量减
1后的值Inc有序类型变量变量加1后的值Pred有序表达式表达式前驱的值Succ有序表达式表达式后继的值Ord有序表达式有序表达式的值Low有序类型标识符或有序类型变量该类型的最小值High有序类型标识符或有序类型变量该类型的最大值Odd有序表达式判断是否为奇数返回上一页下一页Delphi面向对象
程序设计第二章ObjectPascal语法基础2.4.1简单数据类型整型(Integer):整型数据类型描述了整个数字集合的一个子集。Delphi支持多种整型数据,请注意从取值范围、占用存储空间、有无符号等方面区别这些不同的整型。演示:整数数据类型的大小和范围返回上一页下一页
Delphi面向对象程序设计第二章ObjectPascal语法基础2.4.1简单数据类型字符型(Character):字符型是存储单个字符数据的类型。常用的字符型为Char。常量字符可用代表它们的符号表示,如‘k‟,也可以用数字符号表示,如#78。后者还可以用Chr函数表示,Chr函数返回数字对
应于AnsiChar或WideChar中的字符值,如Chr(78)返回值为小写字母k。函数Ord则用于获得字符在其字符集中的序号。下面列出了一些常用的特殊字符#9跳格(Tab键)#10换行#13回车(Enter键)返回上一页下一
页Delphi面向对象程序设计第二章ObjectPascal语法基础2.4.1简单数据类型布尔型(Boolean):布尔型数据用于逻辑运算,表示非真即假的情况。布尔型变量的值为系统预定义的常量True和False,常用的布尔型为Boolean。返回上一页下一页Delphi面向对象程序设计第二章
ObjectPascal语法基础2.4.1简单数据类型枚举类型(EnumeratedType):枚举类型采用列举出该类型所有可能取值的方式定义了一个有序的值的集合,其定义语法格式为:type<类型名>=(值1,值2
,……,值n);例如:typeweekday=(Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday);注意:枚举类型也是有序类型。返回上一页下一页Delphi面向对象程序设计
第二章ObjectPascal语法基础2.4.1简单数据类型子界类型(SubrangeType):子界类型定义了某种类型的取值范围,是另一种有序类型的子集,其定义语法格式为:type<类型名>=起始值..终止值;例如:typeMyNumber=0..128;
注意:子界类型也是有序类型。返回上一页下一页Delphi面向对象程序设计第二章ObjectPascal语法基础2.4.1简单数据类型实型(Real):实数类型定义了一个可以按照浮点格式进行描述的数字的
集合。常用的实数类型为Real。返回上一页下一页Delphi面向对象程序设计第二章ObjectPascal语法基础2.4.2字符串类型(String)字符串类型用于表示一个字符的序列。常用的字符串类型为String,
例如:vars:string;begins:=„Hello‟;end;返回上一页下一页Delphi面向对象程序设计第二章ObjectPascal语法基础2.4.3结构类型(StructuredType)集合类型(
SetType):集合类型是同种有序类型的值的集合,该有序类型为集合类型的基类型。其定义的语法格式为:type<集合类型名>=setof<基类型>;例如:typeTSomeInts=1..250;//定义子
界类型TSomeIntsTIntSet=setofTSomeInts;//定义集合类型TIntSet,其基类型为TSomeIntsVarIntSet1=TIntSet;beginIntSet1=[1,3,5,7,9];end;返回上一页下一页Delphi面向对象程序
设计第二章ObjectPascal语法基础2.4.3结构类型(StructuredType)数组类型(ArrayType):数组类型表示的是同类数据的集合。数组类型的数据每个元素都有一个唯一的下标值,可以通过在方括号中填
入下标值的方式来访问数组中的元素。数组类型定义的语法格式为:type<数组类型名>=array[下标范围]of<基类型>;例如,下面的代码定义了一个有10个整型元素的数组:typeTMyArr=array[1..10]ofInteger;返回上一页下一页Delphi面向对
象程序设计第二章ObjectPascal语法基础2.4.3结构类型(StructuredType)数组既可以在声明时指定其大小,也可以在运行时动态分配内存改变大小,即动态数组。例如:typeTMyArr1=arr
ay[1..10]ofinteger;//一维静态数组TMyArr2=array[1..10,1..5]ofinteger;//二维静态数组TMyArr3=arrayofinteger;//一维动态数组TMyArr4=a
rrayofarrayofinteger;//二维动态数组返回上一页下一页Delphi面向对象程序设计第二章ObjectPascal语法基础2.4.3结构类型(StructuredType)数组在使用时常常会用到Low和High函数来获取数组的
下标和上标,同时,数组的使用常会和循环结构结合起来,例如:VarArr1:array[1..10]ofinteger;I,Sum:integer;beginSum:=0;ForI:=Low(Arr1)toHigh(Arr
1)dobeginArr1[I]:=I;sum:=sum+Arr1[I];end;ShowMessage(„Sumis„+IntToStr(Sum));end;返回上一页下一页Delphi面向对象程序设计第二章Object
Pascal语法基础2.4.3结构类型(StructuredType)对于动态数组而言,在使用前,需要调用SetLength过程设置数组的长度,例如:varA:arrayofinteger;I,Sum:integer;beginSum:=0;S
etLength(A,10);forI:=Low(A)toHigh(A)dobeginA[I]:=I;Sum:=Sum+A[I];end;end;返回上一页下一页Delphi面向对象程序设计第二章ObjectPascal语法基础2.4.3结构类型(Structu
redType)记录类型(Record):记录类型类似于C语言中的结构体类型,可以用来保存一组不同数据类型的信息,记录中的每个成员(域),有它自身的数据类型。声明记录类型的语法格式为:type<记录类型名>=recordField1:Fiel
dType1;Field2:FieldType2;……end;返回上一页下一页Delphi面向对象程序设计第二章ObjectPascal语法基础2.4.3结构类型(StructuredType)下面的例子说明了记录类型的使用方法:typeTStudent=rec
ordStNumber:integer;StName:string;StScore:real;end;varStudent1:TStudent;//声明TStudent类型的变量Student1。//为记录类型的变量Student1赋值Stu
dent1.StNumber:=1000;Student1.StName:=’张三’;Student1.StScore:=85.5;需要注意的是,记录类型的变量不能在定义变量的时候为其赋初值。返回上一页下一页Delphi面向对象程序设计第二章ObjectPa
scal语法基础2.4.4指针类型(Pointer)指针是存放指定类型变量内存地址的变量,即指针类型的变量指向的是内存空间的地址。下面的例子说明了指针类型的简单用法:VarP:^integer;X:intege
r;beginX:=100;P:=@X;//将整型变量X的地址赋值给指针变量PWriteln(„x=‟,P^);//输出P所指向地址中的内容,即X的值Readln;end;返回上一页下一页Delphi面向对象程序设计第二章ObjectPasca
l语法基础2.5运算符与表达式ObjectPascal中的运算符可以分为算术运算符、逻辑运算符、关系运算符、位运算符、指针运算符和集合运算符等。每种运算符结合其操作数的数据类型能够实现特定的功能。表达式是
由常量、变量、数值、运算符和函数调用等按照一定的语法规则组合起来的,可以用于确定赋给一个变量的值、计算函数或过程的参数、或判断一个条件等。注意:使用运算符要注意优先级的问题。返回上一页下一页Delphi面向对象程序设计第二章ObjectPascal语法基础2.5.1算术运算符包括
+、-、*、/、div、mod。注意:1.“+”和“-”运算符。可以放在操作数前,表示正数和负数。2.“/”和“div”和“mod”运算符。“/”运算符进行浮点除,其操作数既可以是整型也可以是实型,运算结果是实型;“div”运算符进行整除,要求两个操作数都是整型,运算结果为经过四舍五入后得到的整
数值;取模“mod”运算符也要求两个操作数都是整型,运算结果为两数相除后的余数。这三个运算符都要求第二个操作数的值不能为0。返回上一页下一页Delphi面向对象程序设计第二章ObjectPascal语法基础2.5.2逻辑运算符包括not、and、
or、xor。逻辑运算符的作用是进行逻辑运算,其操作数类型都要求是逻辑型,运算结果也是逻辑型。其中,not运算符的作用是逻辑取反;and运算符的作用是逻辑与;or运算符的作用是逻辑或;xor运算符的作用是逻辑异或。返回上一页下一页Delphi面向对象程序设计第二章Object
Pascal语法基础2.5.3关系运算符包括=、<>、<、>、<=、>=。关系运算符反映的是两个操作数之间的关系,其操作数可以是一般的数据类型,但运算结果只能是True和False两种逻辑型。注意:在ObjectPascal中,判断不等使用的运
算符是“<>”,而其它语言,如C语言中,使用的是“!=”;还要注意判断相等使用的“=”和赋值号“:=”之间的区别。返回上一页下一页Delphi面向对象程序设计第二章ObjectPascal语法基础2.6语句在ObjectPascal中,语句是由关键字、运算符和操作数等组成
的,并且以分号“;”结尾。还可以将多条语句用“begin…end”括起来,称为复合语句。返回上一页下一页Delphi面向对象程序设计第二章ObjectPascal语法基础2.6.1赋值语句在ObjectPascal中赋值号是“
:=”,表示将赋值号右边表达式的值赋给左边的变量。注意:1.不同语言中的赋值号不同,例如C语言中赋值使用“=”,而在ObjectPascal中“=”是关系运算符,表示判断是否相等。2.赋值符号左边必须是变量,不能是常量或者表达式。返回上一页下一页Delphi面向对象程序
设计第二章ObjectPascal语法基础2.6.2条件语句在ObjectPascal中,条件语句有两种基本形式:if语句和case语句。1.If语句If语句有两种基本形式:•if条件表达式then语句•if条件表达式then语句1else语句2对于前者而言,
仅当条件表达式的值为真,即条件满足时,语句才执行;对于后者,当条件表达式的值为真时,执行语句1,为假时,执行语句2。返回上一页下一页Delphi面向对象程序设计第二章ObjectPascal语法基础2.6.2条件语句2.
case语句Case语句执行的是对一个结果的多种分支进行判断,由Case语句中表达式的值来决定具体执行哪个操作。当if语句非常复杂的时候,可以考虑用Case语句来代替它。Case语句的语法格式为:caseSwitc
hExpressionofCase1:Expression1;Case2:Expression2;……CaseN:Expressionn;elseStatement;end;返回上一页下一页Delphi面向对象程序设计第二章Object
Pascal语法基础2.6.2条件语句2.case语句注意:•SwitchExpression应该是一个有序类型的表达式(如整型、字符型、布尔型、子界类型等),不能是实型值。•caseN的值也应该是一个有序类型的值。而
且每个值必须是常量,且必须是唯一的。返回上一页下一页Delphi面向对象程序设计第二章ObjectPascal语法基础2.6.3循环语句循环控制语句的作用是为了多次执行某个或某些语句,以大大缩短程序的源代码,并增加程序的可读性。Delphi中的循
环控制语句主要是for…do、repeat…until和while…do语句。返回上一页下一页Delphi面向对象程序设计第二章ObjectPascal语法基础2.6.3循环语句for…do循环:ObjectPascal中的for循环有两种方式,一种是
循环变量增1,即:for循环变量:=循环变量初值to循环变量终值do循环体;另一种是循环变量减1,即:for循环变量:=循环变量初值downto循环变量终值do循环体;在to循环中,循环变量的初值必须小于终值,而在downto循环中,循环
变量的初值必须大于终值。对于那些已知循环次数的问题来说,for循环是非常适合的。返回上一页下一页Delphi面向对象程序设计第二章ObjectPascal语法基础2.6.3循环语句repeat…until循环:repeat…until是直到型循环,它的语法格式为
:repeat循环体;until循环条件;返回上一页下一页Delphi面向对象程序设计第二章ObjectPascal语法基础2.6.3循环语句While…do循环:While…do是当型循环,它的语法格式为:whi
le循环条件do循环体;请注意比较repeat…until和While…do循环二者在循环体执行次数、循环终止条件方面的差别。返回上一页下一页Delphi面向对象程序设计第二章ObjectPascal语法基础2.6.3循环语句Break和Continue语句二者用于改变循环执行的流程。
Break语句用来直接中断循环,Continue语句则用来跳出当次循环,而直接回到循环条件处进行判断,或者在for循环中,使循环变量直接增加或减小1,然后继续循环(除非循环条件不满足或循环变量达到了上限)。这和
C语言中的Break、Continue语句作用相同。返回上一页下一页Delphi面向对象程序设计第二章ObjectPascal语法基础2.6.4With语句with语句的作用主要是用来简化代码的。例如下面的代码:Form1.Canvas
.Pen.Width:=2;Form1.Canvas.Pen.Color:=clRed;可以用with语句来简化为:withForm1.Canvas.PendobeginWidth:=2;Color:=clRed;end;返回上一页下一页Delphi面向对象程序设
计第二章ObjectPascal语法基础2.7过程与函数过程与函数是一个相对独立的语句块,能够实现特定的功能,可以被其他程序块调用,类似于C语言中的子程序。二者之间最大的差别是:函数在执行后有一个返回值,而过程则
没有返回值。因此,函数可以作为表达式来使用。返回上一页下一页Delphi面向对象程序设计第二章ObjectPascal语法基础2.7.1过程的声明过程声明的语法格式如下:procedure过程名(形式参数列表);begin过程体;end;返回上一页下一页Delphi面
向对象程序设计第二章ObjectPascal语法基础2.7.2函数的声明函数声明的语法格式如下:function函数名(形式参数列表):返回值类型;begin函数体;end;返回上一页下一页Delphi面向对象程序设计第二章Objec
tPascal语法基础2.7.3过程与函数的参数过程与函数的形参和实参之间的传递有传值和传地址两种方式。传值方式是缺省的参数传递方式:即将实参的值拷贝压入栈中,而函数或过程使用和操作的都是栈中的拷贝值,而不是原始值。因此在函数或过程中对参数的改变并不会影响到实参本身。如
果在过程和函数声明时,在形参名前加var保留字进行说明的话,就是传地址方式,也称为引用参数。当通过引用传递参数时,是直接引用参数原始值,函数或过程使用和操作的都是原始值,因此,能够在函数或过程中改变实参的值。返回上一页下一页Delphi面向对象程序设计第二章Ob
jectPascal语法基础2.7.4过程与函数的调用函数或过程调用时,要求实参与形参数量相同,顺序相同,类型相容,否则会出现编译错误或结果错误。返回上一页Delphi面向对象程序设计Delphi面向对象程序设计第
三章Delphi面向对象编程思想•本章内容面向对象程序设计的基本概念Delphi中类的声明、实现和使用构造方法和析构方法Delphi中类的继承性和应用Delphi中类的多态性和应用Delphi中抽象方法和抽象类的应用Delphi中类操作符的应用Delphi面向对象程
序设计第三章面向对象编程思想3.0面向对象程序设计的基本概念3.0.0什么是面向对象程序设计OOP(ObjectOrientedProgramming)?下一页返回Delphi面向对象程序设计3.0面向对象程序设计的
基本概念OOP有以下几个基本观点:•客观世界由对象组成,任何客观事物或实体都是对象,复杂的对象可以由简单对象组成。•具有相同数据和操作的对象可归为一个类,对象是类的一个实例。•类可以派生出子类,子类继承父类的全部特性(数据和操作),又可以有自己的新特征。子类和父类构成层次结构。第三章Delphi面
向对象编程思想下一页上一页返回Delphi面向对象程序设计3.0面向对象程序设计的基本概念OOP有以下几个基本观点:•对象之间通过消息传递相互联系。类具有封装性,其数据和操作等对外界是不可见的,外界只
能通过消息请求某些操作,提供所需服务。面向对象=对象+类+继承+通信第三章Delphi面向对象编程思想下一页上一页返回Delphi面向对象程序设计3.0.1面向对象方法的发展•初始阶段Simula语言是第一个里程碑,引入了类的概念和继承
机制;Smalltalk语言•发展阶段C++为代表•成熟阶段面向对象分析和设计技术走向实用,最终形成了从分析、设计到编程、测试与维护一整套的软件工程体系第三章Delphi面向对象编程思想下一页上一页返回Delphi面向对象程序设计3.0.2对象(Object)系统中用来描述客观事物的一个
实体,是构成系统的一个基本单位,由一组属性和对属性的操作方法(服务)组成。属性:描述对象的静态特征的数据项方法:描述对象的动态特征的操作序列对象=属性+方法第三章Delphi面向对象编程思想下一页上一页返回Delph
i面向对象程序设计3.0.3类(Class)具有相同属性和方法的一组对象的集合,为该类的全部对象提供了统一的抽象描述,好比一个对象模板,用它可以产生多个对象。类和对象的关系第三章Delphi面向对象编程思想下一页上一页返回Delphi面向对象程序设计3.0.4封装(Enc
apsulation)把对象的属性和方法结合成一个独立的系统单位,并尽可能隐藏对象的内部细节。封装的概念第三章Delphi面向对象编程思想下一页上一页返回Delphi面向对象程序设计3.0.5继承(Inheritance)子类可以自动拥有父类的全部属性和方
法。类的继承第三章Delphi面向对象编程思想下一页上一页返回Delphi面向对象程序设计3.0.6消息(Message)对象发出的服务请求,一般包含提供服务的对象标识、服务标识、输入信息和应答信息等信息。消息驱动第三章Delphi面向对象编程思想下一页上
一页返回Delphi面向对象程序设计3.0.6多态性(Polymorphism)在父类中定义的属性或服务被子类继承后,可以具有不同的数据类型或表现出不同的行为。第三章Delphi面向对象编程思想下一页上一页返回Delphi面向对象程序设计3.1Delphi中类的声明、实现和使用3.1.1
类的声明类声明的语法格式如下:type类名=class(基类){数据成员声明}{过程和函数声明}{属性声明}end;第三章Delphi面向对象编程思想下一页上一页返回Delphi面向对象程序设计3.1.1类的声明注意:1.类名可
以为任何合法的标识符,但习惯上一般以大写的字母“T”开头,以和Borland公司的编码风格吻合;2.class为保留字,表示声明的是类类型;3.class保留字后的括号中是基类名,表示当前声明的类是从该基类继承,如果类声明中省略基类名,则当前声明的类缺省从根类TObject
类继承。第三章Delphi面向对象编程思想下一页上一页返回Delphi面向对象程序设计3.1.1类的声明类声明示例:typeTHuman=class(TObject)privateFname:Stri
ng;FAge:Integer;publicprocedureSetAge(Value:integer);functionGetName:string;procedureSetName(Value:string);procedureSayHello(Words:string);propert
yAge:integerreadFagewriteSetAge;end;第三章Delphi面向对象编程思想下一页上一页返回Delphi面向对象程序设计3.1.2类的实现类的实现实际上是类的方法成员的实现。类的声明中方法成员只给出了函数或过程的首部,而函数体和过程体则要在
类的实现部分给出。在Delphi中类的声明和实现必须分开。第三章Delphi面向对象编程思想下一页上一页返回Delphi面向对象程序设计3.1Delphi中类的声明、实现和使用类的实现即类的方法成员的实现。类的
声明中方法成员只给出了函数或过程的首部,而函数体和过程体则要在类的实现部分给出。在Delphi中类的声明和实现必须分开。第三章Delphi面向对象编程思想3.1.3类的使用使用类前需要先创建类的对象实例,再通过该对象实例去访问域、属性和方法以完成
类的各种操作。具体步骤如下:1.声明类的一个变量,即类的对象变量。这时可以将类作为一种用户自定义的数据类型来看待;2.调用类的构造方法来生成类的对象实例,并为对象在内存中分配资源,将对象变量的隐含指针指向该内存的首地址。类的构造方法一般
命名为Create。3.对类的对象实例进行操作、使用。可以修改对象的属性或调用对象的方法。形式形如:对象名.属性名或对象名.方法名(参数)。4.对象使用完毕后,调用类的析构方法来删除对象并释放相应的内存资源。析构方法一
般命名为Destroy,我们一般会使用Free过程来间接调用类的析构方法,以避免删除不存在的对象而出错。下一页上一页返回Delphi面向对象程序设计3.1Delphi中类的声明、实现和使用类的实现即类的方法成
员的实现。类的声明中方法成员只给出了函数或过程的首部,而函数体和过程体则要在类的实现部分给出。在Delphi中类的声明和实现必须分开。第三章Delphi面向对象编程思想3.2构造方法和析构方法3.2.1构造
方法构造方法是类中特殊的创建和初始化对象实例的方法。构造方法的声明与普通的过程类型声明类似,但是使用Constructor保留字代替Procedure,构造方法的方法名可以是任何合法的标识符,但一般来说,我们都用Create作为构造方法的方法名。下一页上一页返
回Delphi面向对象程序设计3.1Delphi中类的声明、实现和使用类的实现即类的方法成员的实现。类的声明中方法成员只给出了函数或过程的首部,而函数体和过程体则要在类的实现部分给出。在Delphi中类的声明和实现必须分开。第三章Delphi面向对象编程思想3.2构造
方法和析构方法3.2.2析构方法析构方法用于释放对象实例所占用的内存。析构方法的声明和过程方法类似,只是使用保留字destructor。析构方法的方法名一般为Destroy。下一页上一页返回Delph
i面向对象程序设计3.1Delphi中类的声明、实现和使用类的实现即类的方法成员的实现。类的声明中方法成员只给出了函数或过程的首部,而函数体和过程体则要在类的实现部分给出。在Delphi中类的声明和实现
必须分开。第三章Delphi面向对象编程思想3.3Delphi中类的继承性和应用类的继承机制提供了通过重用已有代码定义新类的手段,使父类的数据结构和操作能被子类重用;并在两个或多个不同的类之间建立了关系,使得程序具有良好的结构。
Delphi使用派生类实现继承,允许从任何已存在的类--基类(BaseClass)或父类(ParentClass)派生新类--派生类(DerivedClass)或子类(ChildClass)。使用继承机制一般应该遵循is-a原则,即
子类对象是父类对象的特例。下一页上一页返回Delphi面向对象程序设计3.1Delphi中类的声明、实现和使用类的实现即类的方法成员的实现。类的声明中方法成员只给出了函数或过程的首部,而函数体和过程体则要在类的实现部分给出。在Delphi中类的
声明和实现必须分开。第三章Delphi面向对象编程思想3.3Delphi中类的继承性和应用Delphi中表示类的继承的语法是:type子类名=class(父类名){子类的域、属性和方法的声明}end;子
类中仅需要自身特有而父类缺少的数据结构和操作,或修改父类的操作即可。注意:在Delphi中,子类会继承父类所有的域、属性和方法,但却不是全部都能在子类中被访问。这里有类成员的可见性问题。下一页上一页返
回Delphi面向对象程序设计3.3Delphi中类的继承性和应用Delphi中类成员的可见性分为单元级可见性和类级可见性。单元级可见性:同一个单元文件中定义的类之间可以相互访问其所有的域或属性。类级可见性:Private(私有成员,只能被类本身访问)、Protected
(保护成员,类似于Private成员,但是可以被派生类访问)、Public(公有成员,可以被程序中任何代码访问)、Published(发布成员,类似于Public成员,但可以在ObjectInspector中显示)第三章Delphi面向对
象编程思想Delphi面向对象程序设计3.1Delphi中类的声明、实现和使用类的实现即类的方法成员的实现。类的声明中方法成员只给出了函数或过程的首部,而函数体和过程体则要在类的实现部分给出。在Delphi中类的声明和实现必须分开。第三章Delphi面向对象编程思想3.3Delphi
中类的继承性和应用VCL(VisualComponentLiberary)可视化组件库由若干被称为组件的类组成,这些类之间有一定的继承层次关系。所有的VCL类都继承自TObject类,所有的VCL组件都继承自TComponent类。可见的组件如TForm、TButton、TEdit等,将出
现在运行时的屏幕上,成为控件(Control)。所有运行时可见的组件都由TControl类派生,因而控件是组件的一个子集。下一页上一页返回Delphi面向对象程序设计3.1Delphi中类的声明、实现和使用类的实现即类的方法成员的实现。类的声明中
方法成员只给出了函数或过程的首部,而函数体和过程体则要在类的实现部分给出。在Delphi中类的声明和实现必须分开。第三章Delphi面向对象编程思想3.4Delphi中类的多态性和应用多态性允许将子类类型的指针赋值给父类类型的指针。在O
bjectPascal中多态性是通过虚方法实现的。下一页上一页返回Delphi面向对象程序设计3.1Delphi中类的声明、实现和使用类的实现即类的方法成员的实现。类的声明中方法成员只给出了函数或过程的首部,而函数体和过程体则要在类
的实现部分给出。在Delphi中类的声明和实现必须分开。第三章Delphi面向对象编程思想3.4.1静态方法如果在类的声明中,在方法后不使用virtual或dynamic等方法指示符,则该方法就是静态方法。
我们在类中声明的方法缺省就是静态方法。如果在父类中定义了一个静态方法,在它的派生类中可以定义不同实现的同名方法,其本质相当于对父类同名方法的重载。当调用静态方法时,方法名前的对象的声明类型唯一确定调用哪一个方法。下一页上一页返回Delphi面向对象程序设计
3.1Delphi中类的声明、实现和使用类的实现即类的方法成员的实现。类的声明中方法成员只给出了函数或过程的首部,而函数体和过程体则要在类的实现部分给出。在Delphi中类的声明和实现必须分开。第三章Delphi面向对象编程思想3.4.2虚拟方法如果在类的声明中,在方法后使用virtual保留字
,则该方法就是虚拟方法。在派生类中可以用override保留字来覆盖父类中的虚拟方法。在调用虚拟方法时,调用对象在运行时所引用的实际对象类型决定调用哪一个方法,而不管调用对象声明时是什么类型。即使将一个子类的对象变量
转换为父类类型,只要它实际引用的是子类类型的对象实例,调用的都将是子类的方法。下一页上一页返回Delphi面向对象程序设计3.1Delphi中类的声明、实现和使用类的实现即类的方法成员的实现。类的声明中
方法成员只给出了函数或过程的首部,而函数体和过程体则要在类的实现部分给出。在Delphi中类的声明和实现必须分开。第三章Delphi面向对象编程思想3.4.3动态方法如果在类的声明中,在方法后使用dynamic保留字,该方法就成为动态方法。动态方法与虚拟方法在语义上是等价的,都可以在派生类中
用override保留字覆盖来实现多态。它们唯一的区别在于Delphi对方法调用策略的内部实现上:虚拟方法从速度最优的角度实现代码优化,而动态方法则从空间最优的角度实现代码优化。下一页上一页返回Delphi面向对象程序设计3.1Delphi中类的声明、实现和使用类的实现即类的方
法成员的实现。类的声明中方法成员只给出了函数或过程的首部,而函数体和过程体则要在类的实现部分给出。在Delphi中类的声明和实现必须分开。第三章Delphi面向对象编程思想3.4.4多态性小结要实现多态性,下述三大要素是必需的:•在父类中定义虚拟或
动态方法;•在子类中覆盖(override)父类中的虚拟或动态方法;•声明父类类型的变量,则该变量既可以指向父类的实例,也可以指向子类的实例。当变量指向父类的实例时,调用的是父类的方法;当变量指向子类实例时则调用子类同名的方法。下一
页上一页返回Delphi面向对象程序设计3.1Delphi中类的声明、实现和使用类的实现即类的方法成员的实现。类的声明中方法成员只给出了函数或过程的首部,而函数体和过程体则要在类的实现部分给出。在Delphi中类的声明和实现必须分开。第三章Delphi面向对象编
程思想3.5Delphi中抽象方法和抽象类的应用抽象方法的声明使用abstract保留字,并且该保留字必须位于virtual或dynamic保留字之后,即抽象方法总是虚拟方法或动态方法。一个方法一旦声明为抽象的,则具有该方法的当前类就不需要实现它,它的实现延迟到
子类中进行。包含了抽象方法声明的类为抽象类。注意:ObjectPascal虽然允许创建抽象类的对象实例,且允许该实例调用其非抽象方法,但不允许调用其中的抽象方法,因为根本没有该方法的实现。下一页上一页返回Delphi面向对象程序设计3.1Delphi中类的
声明、实现和使用类的实现即类的方法成员的实现。类的声明中方法成员只给出了函数或过程的首部,而函数体和过程体则要在类的实现部分给出。在Delphi中类的声明和实现必须分开。第三章Delphi面向对象编程思想3.6Delphi中类操作符的应用在程序运行期间,可以使用is
操作符和as操作符来进行类的运行时类型信息检测和类型转换。通常把这两个操作符称为类操作符。下一页上一页返回Delphi面向对象程序设计3.1Delphi中类的声明、实现和使用类的实现即类的方法成员的实现。类的声明中方法成员只给出了函数或过程的首部,而函数体和过程体则要在类
的实现部分给出。在Delphi中类的声明和实现必须分开。第三章Delphi面向对象编程思想3.6.1类型判断操作符is操作符is用来测试对象变量的类型与给定的对象变量是否相容。也就是说,is操作符用于判断对象是否是操作符右边的同类或派生类。其语法形式为:对象变量名is类名;下一页上一
页返回Delphi面向对象程序设计3.1Delphi中类的声明、实现和使用类的实现即类的方法成员的实现。类的声明中方法成员只给出了函数或过程的首部,而函数体和过程体则要在类的实现部分给出。在Delphi中类的声明和实现必须分开。第三章Delphi面向对象编程思想3.6.2类型强制
转换操作符asas操作符用于把一个对象变量的类型转换为另一个类的类型,表达式的结果类型是as操作符右端的类的类型。其语法形式为:对象变量名as类名;注意:as操作符只能用于将后代类的实例转换为祖先类的实例,因此,as操作符左边的对象必须满足下列三种情形之一,否则将导致异常:•是as操作符右
边类类型的实例;•是as操作符右边类类型的后代类的实例;•值为nil。上一页返回Delphi面向对象程序设计Delphi面向对象程序设计第四章Delphi基本组件编程(一)•本章内容VCL的属性、方
法和事件窗体(Form)的属性、方法和事件以及窗体的创建Delphi中与面向对象概念相关的几个保留字按钮、标签、文本框等基本VCL组件的应用Delphi面向对象程序设计4.0VCL的属性、方法和事件VCL是
Delphi的类库,即VisualComponentLibraryVCL组件采用的是PME(Property/Method/Event)开发模式,能极大地提高开发效率。第四章Delphi基本组件编程(一)下一页返回Delph
i面向对象程序设计4.0.1VCL组件的属性(Property)属性是对组件表现形式的描述,包括外观(如大小、位置、颜色等)、标题、可用性、可见性等。属性大多数既可以在对象观察器窗体中静态设置,也可以在程序中用代码动态设置;也有部分属性之内在对象观察器中静态设置或只能
在程序中动态设置。第四章Delphi基本组件编程(一)下一页返回上一页Delphi面向对象程序设计4.0.1VCL组件的属性(Property)在对象观察器中的属性分为五种类型:简单属性、枚举属性、集合属性、编辑属性和复合属性。第四章Delph
i基本组件编程(一)下一页返回上一页Delphi面向对象程序设计4.0.1VCL组件的属性(Property)简单属性只需属性属性值即可,如决定组件大小的Width、Height属性,决定组件位置的Top、Left属性等。其对应数据
类型为ObjectPascal语言本身的标准数据类型。第四章Delphi基本组件编程(一)下一页返回上一页Delphi面向对象程序设计4.0.1VCL组件的属性(Property)枚举属性将所有的取值
罗列出来供选择,其属性值包含在一个组合框中,如决定决定窗体状态的WindowState属性,就有wsNormal、wsMaximized、wsMinimized三种取值供选择。其对应数据类型为ObjectPascal语言的枚举类型。第四章Delphi基本组件编程(一)下一页返回上一页Delphi
面向对象程序设计4.0.1VCL组件的属性(Property)集合属性的属性值是由多个值构成的集合,如决定窗体标题栏中显示哪些图标的BorderIcons属性,其取值就是:biSystemMenu,biMinimize,biMaximize,biHelp四个值的集合。其
对应数据类型为ObjectPascal语言的集合类型。第四章Delphi基本组件编程(一)下一页返回上一页Delphi面向对象程序设计第四章Delphi基本组件编程(一)4.0.1VCL组件的属性(Property)编辑属性在对象观察器中有一个按钮,单击该按钮可以
打开一个属性编辑对话框,在该对话框中输入其属性值。例如Memo组件的Lines属性就采用这种方式。下一页返回上一页Delphi面向对象程序设计第四章Delphi基本组件编程(一)4.0.1VCL组件的属性(Property)复合属性就是该属性本身由若干子属性构成,例如组件
的字体Font属性就是由CharSet、Color、Height、Name、Pitch、Style等多个子属性构成的复合属性。下一页返回上一页Delphi面向对象程序设计第四章Delphi基本组件编程(一)4.0.2VCL组件的方法(Method)组件的方法就是组件类声明
的过程和函数,它反映了对象的行为。例如窗体类的Show方法可以用来显示一个窗体。调用方法的语法格式为:组件对象名.方法名(参数)下一页返回上一页Delphi面向对象程序设计第四章Delphi基本组件编程(一)4.0.3VCL组件的事件(Event)组件的事件是组件对用
户某个动作的响应。事件的响应由Delphi提供的事件出来过程实现。当发生某个特定事件时,就执行相应的事件处理过程代码。组件对应的事件位于对象观察器的Events选项卡中。下一页返回上一页Delphi面向对象程序设计第四章Delp
hi基本组件编程(一)4.1窗体(Form)窗体是应用程序与用户进行交互的窗口,是放置组件最常用的容器。下一页返回上一页Delphi面向对象程序设计第四章Delphi基本组件编程(一)4.1.1窗体的属性窗体的属性决定了窗体的大小、位置、风格、标题、名称等特征。常用的有Height、Wid
th、Left、Top、FormStyle、Caption、Name等。下一页返回上一页Delphi面向对象程序设计第四章Delphi基本组件编程(一)4.1.2窗体的事件窗体的事件主要包括建立窗体、激活窗体以及关闭窗体时发生的事件,如OnCreate、OnShow
、OnClose等。下一页返回上一页Delphi面向对象程序设计第四章Delphi基本组件编程(一)4.1.3窗体的方法窗体的常用方法如Create、Show、ShowModal、Close等,调用方法时通常会触发相应的事件。下一页返回上一页Delphi面向对象程序设计第四章Delphi基本组件
编程(一)4.1.4窗体的创建窗体可以用静态和动态两种方式创建。静态创建的窗体在程序运行时就已经创建了,当工程中的窗体数目很多时,会浪费系统资源;而动态创建的窗体则是由代码手工创建,窗体使用完毕后再手工释放,从而最多限度地
节约系统资源。下一页返回上一页Delphi面向对象程序设计第四章Delphi基本组件编程(一)4.2保留字Parent、Owner、Sender、Self一个对象的Parent对象是指包含这个对象的容器对象。一个对象的Owner属性就
是指这个对象的所有者对象。在事件处理程序参数表中,至少含有一个参数Sender,它代表触发事件处理程序的组件。Self是指所编写的程序范围是在哪一个类中。下一页返回上一页Delphi面向对象程序设计第四章Delphi基本组件编程(一)4.3按钮、标签、文本框的应用这些组件位于组件板的
Standard页上,使用频率很高。下一页返回上一页Delphi面向对象程序设计第四章Delphi基本组件编程(一)4.3.1按钮(Button)Button组件主要用于用户对程序的控制,是事件驱动模式的最明显的体现。其常用属性如:Capti
on、Name、Default、ModalResult等;常用事件为OnClick。下一页返回上一页Delphi面向对象程序设计第四章Delphi基本组件编程(一)4.3.2标签(Label)标签是Delphi中最常用的输出静态文本信息的组件,通常作为其它不具备提示信息的文本组件如Ed
it、Memo等组件的提示文本。常用属性如:Caption、AutoSize等;下一页返回上一页Delphi面向对象程序设计第四章Delphi基本组件编程(一)4.3.3文本框(Edit)文本框组件主要用于输入单行文字,其常用属性如:Text、PasswordChar、Read
Only等;常用事件如:OnChange、OnKeyPress和OnEnter事件下一页返回上一页Delphi面向对象程序设计Delphi面向对象程序设计第五章VCL组件应用•本章内容备注框Memo组件组
框GroupBox组件和面板Panel组件复选框CheckBox组件和单选按钮RadioButton组件位图按钮BitBtn组件和加速按钮SpeedButton组件单选按钮组RadioGroup组件Delphi面向对象
程序设计5.1备注框组件(Memo)备注框用于处理多行文本,位于组件板的Standard页中,与Edit组件有很多共同特性,其主要属性如:Lines、CarePos、Modified等,其中Lines属性决定了备注框中的文本。第五章VCL组
件应用下一页返回Delphi面向对象程序设计5.2组框(GroupBox)和面板(Panel)组件这两种组件通常用于作为容器组件来美化界面或将其它组件分组,在其上可以放置其它组件,均位于组件板的Standard页中。第五章VCL组件应用下一页返回上一页Delphi面向对象程序设计5.3复
选框(CheckBox)和单选按钮(RadioButton)二者分别用来表示多选和单选两种选择方式,均位于组件板的Standard页中。其重要属性主要是Caption和Checked。第五章VCL组件应用
下一页返回上一页Delphi面向对象程序设计5.4位图按钮(BitBtn)和加速按钮(SpeedButton)位图按钮和Button相似,但其上可以显示小图标,位于组件板的Additional页中。其特有属性如:Glyph、Kind、Lay
Out等。加速按钮可成组工作,常用于设计工具栏,位于组件板的Additional页中。第五章VCL组件应用下一页返回上一页Delphi面向对象程序设计5.5单选按钮组(RadioGroup)单选按钮组相当于GroupBox组件和一组RadioButton组件的组合,位于组件板的Stan
dard页中。其重要属性如:Items、ItemIndex、Columns、Caption等。第五章VCL组件应用下一页返回上一页Delphi面向对象程序设计Delphi面向对象程序设计第六章VCL组件应用(续一)•本章内容形状Shap
e组件列表框ListBox组件和下拉列表框ComboBox组件计时器Timer组件Delphi面向对象程序设计6.1形状组件(Shape)形状组件用于绘制简单几何图形,如矩形、圆、椭圆、正方形等,位于组件板的Additional页中,其最重要的属性
莫过于Shape属性了,它决定了Shape组件的形状;另外Brush和Pen属性分别决定了形状的填充效果和边界效果。第六章VCL组件应用(续一)下一页返回Delphi面向对象程序设计6.2列表框(ListBox)和下拉列表框(ComboBox)组件列表框和下列列表框组件均可提供取值列表供选择,
位于组件面板的Standard页。只是列表框只供选择,而组合框相当于Edit组件和ListBox的组合。列表内容由Items属性决定;下拉列表框的样式由Style属性决定。第六章VCL组件应用(续一)下一页返回上一页Delphi面向对象程序设计6.3
计时器组件(Timer)Timer组件可以使程序每隔一定时间自动执行某一个动作,它会在指定的时间间隔频繁触发OnTimer事件,使得该事件代码循环执行。Timer组件位于组件板的System页上,其主要属性为
InterVal和Enabled,只有一个OnTimer事件。第六章VCL组件应用(续一)返回上一页Delphi面向对象程序设计Delphi面向对象程序设计第七章异常处理与程序调试技术•本章内容异常的概念异常的响应方法自定义异常程序调试方法Delphi面向对象
程序设计7.1异常的概念所谓异常,是指程序在运行时遇到的一些无法预知,需要特别处理的状况。例如程序要打开一个不存在的文件、网络连接中断、操作数越界、装载一个不存在的类等问题。Delphi提供了一套缺省的自动
异常处理机制,即当程序发生错误后会自动退出当前运行的程序模块,并以对话框的形式给出相应的错误信息,但是并不会引起应用程序的非法终止。第七章异常处理与程序调试技术下一页返回Delphi面向对象程序设计7.1异常的概念Delphi的
异常处理机制是建立在保护块的概念上的。保护块是用保留字try和end封装起来的一段代码。当应用程序发生错误时,系统会自动创建相应的异常类的对象,该异常对象通常包含了错误的相关信息。程序可以捕获并处理这个异常对象,如果程
序中没有定义对该异常的处理,则系统会自动产生一个消息框来描述这个错误,并保证程序不会非法终止。第七章异常处理与程序调试技术下一页返回上一页Delphi面向对象程序设计7.1异常的概念在Delphi中,所有的异常类都派生
自Exception类,该类是在SysUtils单元中定义的,如果一个程序的Uses语句中包含了SysUtils单元,则运行中发生错误时就会引发一个异常。需要注意的是,异常不同错误于,我们完全可以自己引发一个异
常,如下面的语句:RaiseException.Create('MyError');第七章异常处理与程序调试技术下一页返回上一页Delphi面向对象程序设计7.2异常的响应方法7.2.1try…except…endtry…except…end形成了一
个异常响应保护块。正常情况下except后面的语句并不会被执行,而当一条或多条try块中的语句执行失败时,异常发生了,程序自动跳到except块中,进入异常响应处理模块中去执行。当异常被响应后异常类自动清除。第七章异常处理与程序调试技术下一页返回上一页Delphi面向对象程序设计7.2异
常的响应方法7.2.2try…excepton…do…end该异常响应保护块通过使用on…do来响应不同类型的异常,其中on之后为异常的类型。如下面的例子:第七章异常处理与程序调试技术下一页返回上一页Delphi面向对象程序设计varI,J,K:Intege
r;beginTryI:=StrToInt(Edit1.Text);J:=StrToInt(Edit2.Text);K:=IdivJ;Edit3.Text:=IntToStr(K);ExceptOnEDivByZerodoShowMessage(‘除数为0!');OnEConve
rtErrordoShowMessage('数据类型错误!');end;end;第七章异常处理与程序调试技术下一页返回上一页Delphi面向对象程序设计7.2异常的响应方法7.2.3try…finally…end显示错误消息
是异常处理的一个方面,当错误发生时,还应该保证系统的稳定,如:及时释放已经分配的资源,避免系统的崩溃等,这就可以采用try…finally…end结构来实现。Finally之后的语句无论如何都会被执行,因此可以用于资源保护。如下面的例子:第七章异常处理与程序调试技术下一页返回上一页Delphi
面向对象程序设计varP:Pointer;I,J:integer;BeginI:=0;GetMem(P,2048);J:=5divI;FreeMem(P,2048);End;第七章异常处理与程序调试技术下一页返回上一页Delphi面向对象程序设计varP:Poi
nter;I,J:integer;BeginI:=0;GetMem(P,2048);TryJ:=5divI;FinallyFreeMem(P,2048);End;End;第七章异常处理与程序调试技术下一页返回上一页Delphi面向对象程序设计7.
2异常的响应方法7.2.4资源保护与异常处理的结合发生异常时,既要保证资源释放,又要在当前程序块中处理它,就需要用try…except和try…finally的嵌套如下面的例子:第七章异常处理与程序调试技术下一页返回上一页Delphi面向对象程序设计v
arI,j,k:integer;P:Pointer;beginI:=0;J:=10;GetMem(P,4096);trytryK:=JdivI;ShowMessage('K='+IntToStr(K));exceptShowMessage('Dividebyzero');end;final
lyFreeMem(P,4096);ShowMessage('MemoryhasbeenFreed');end;end;第七章异常处理与程序调试技术下一页返回上一页Delphi面向对象程序设计7.3自定义异常自定义异常同定
义新的类相似,只是Delphi中异常的基类是Exception类,因此,自定义异常的语法通常如下:type异常类名=class(Exception)要引发该异常,可以使用如下方法:Raise异常类对象名(参数);第七章异常处理与程序调试技术下一页返回上一页De
lphi面向对象程序设计7.4程序调试方法7.4.1程序中的错误程序中的错误基本上可以分成三类:语法错误、运行时错误和逻辑错误。语法错误:语句不符合语法规范。如:begin和end不匹配、句末漏掉分号、标识符未声明、数据类型不符等。运行时错误:程序通过编译,但执行时发生错误。如:试图打开一个
不存在的文件、被0除等。程序执行到该语句时,Delphi的集成调试环境会自动停止程序执行,并显示错误信息对话框。单击对话框中的OK按钮后,系统便回到源程序中出错的地方。逻辑错误:程序可以通过编译并运行,但结果和期望不同。第七章异常处理与
程序调试技术下一页返回上一页Delphi面向对象程序设计7.4程序调试方法7.4.2程序运行方式RUN:单击Run/Run菜单项或工具栏上的运行按钮或快捷键F9。这时,系统会自动编译该程序。如果程序中没有语法错误,则执行该程序。Compile:选择Proj
ect/Compile菜单项,编译程序会编译包括.dpr在内的全部改动过的文件,并生成.exe文件,但不会运行程序。如果程序中有语法错误,编译程序就能找出来。Build:选择Project/Build菜单项,编译程序会编译项目中的所有文件
,无论它们是否被改动。Project/CompileAllProjects和Project/BuildAllProjects:在使用项目组的时候使用,编译项目组中的所有项目。第七章异常处理与程序调试技术下一页返回上一页Delphi面向对象程序设计
7.4程序调试方法7.4.3断点的使用断点必须设置在可执行语句上,程序运行到断点时会自动停下,回到调试监控模式,此时断点处的语句还没有被执行。可以用单步执行的方式观测各变量的值,从而检查程序的出错点的位置。设置方法:用鼠标单击希望
设断点的行的左侧。第七章异常处理与程序调试技术下一页返回上一页Delphi面向对象程序设计7.4程序调试方法7.4.4单步调试常用的单步调试方法如下:TraceInto:当程序运行到调用自定义函数、过程时,TraceInto方式会进入到子程序内部进行跟踪,并停留在子程序的第一行代码
处。当程序执行到子程序的结束处时,就返回主程序中。但是,这种方法不会进入Delphi提供的库函数内部进行跟踪。使用方法是按F7键。StepOver:每次只执行一行程序,当遇到自定义函数或过程的调用时,不会进入函数进行进一步的跟踪,而是直接把函数执行完毕,再停
在程序的下一行。如果我们能够确信自定义的函数没错时,使用StepOver方法比TraceInto方法更能简化调试工作。使用方法是按F8键。第七章异常处理与程序调试技术下一页返回上一页Delphi面向对象程序设计7.4程序调试方法7.4.4观察窗(WatchList)观察窗是监控
程序执行最有效的工具之一,利用它和前面的各种执行方式相配合,可以检测各个变量及表达式在程序执行的某个阶段的值。第七章异常处理与程序调试技术返回上一页Delphi面向对象程序设计Delphi面向对象程序设计第八章VCL组件应用(续二)•本章内容树状视图组件TreeV
iew列表视图组件ListView跟踪条组件TrackBar和进度条组件ProgressBarTab组件TabControl和多页面组件PageControlDelphi面向对象程序设计8.1树状视图组件(TreeView)TreeView组件位于组件板的Win3
2页上,它将列表内容分级显示,呈树状结构。在树状结构的列表中有一系列节点和子节点,可以将节点展开或折叠。Windows资源管理器窗口中就以树状视图的形式显示出了系统目录。TreeView组件最重要的属性是Items属性,它决定了列表中的内容第八章VCL组件应用
(续二)下一页返回Delphi面向对象程序设计8.2列表视图组件(ListView)列表视图组件ListView位于组件板的Win32页上,与列表框组件ListBox非常相似。不同的是,列表视图组件可以让用户选择不同的显示方式,如:大图标方式、小图标方
式、列表方式和详细资料方式等。Windows操作系统的资源管理器的左边是一个TreeView组件,而右边就是一个典型的ListView组件。ListView组件中显示的项目由Items属性来设置,其显示方式则由ViewStyle属性来确定。第八章VCL组件应用(续二)下一页返回上一页Delph
i面向对象程序设计8.3跟踪条组件(TrackBar)和进度条组件(ProgressBar)TrackBar组件和ProgressBar组件位于组件板的Win32页,都可以用来指示一个区域或范围中的位置,它们有很多相似的属性、方法和事件,如属性:Max、Min、Orientation
、Positiond等;TrackBar最常用的事件是OnChange;ProgressBar最常用的方法是StepIt和StepBy。第八章VCL组件应用(续二)下一页返回上一页Delphi面向对象程序设计8.4Tab组件(
TabControl)和多页面组件(PageControl)TabControl和PageControl均位于组件板的Win32页,这两个组件在外观上非常相似,但却有质的区别。两者都是由多个标签页组成,但PageControl组件每一个标签对应一个单独的页面,每个页面上可以放置不同的控件;而
TabControl组件的多个标签对应的是相同的页面,也就是说只有一个页面,通过标签的变化来改变这个页面上控件的状态。第八章VCL组件应用(续二)下一页返回上一页Delphi面向对象程序设计Delphi面向对象程序设计第九
章对话框•本章内容对话框函数和过程公用对话框系统提供的About窗体自定义对话框Delphi面向对象程序设计9.1对话框函数和过程在Windows程序设计中,对话框常用于应用程序和用户之间的信息交换。在Delphi中,系统提
供了一系列对话框函数和过程可以很方便地实现对话框功能。第九章对话框下一页返回Delphi面向对象程序设计9.1.1ShowMessage过程ShowMessage过程可以显示一个带有“OK”按钮的简单对话框,其语法格式为:procedureShowMessage(constMsg:strin
g);第九章对话框下一页返回上一页Delphi面向对象程序设计9.1.2ShowMessageFmt过程ShowMessageFmt过程的作用与ShowMessage基本相同,但可以以特定的格式显示文本,其语法格式为:procedureShowMes
sageFmt(constMsg:string;Params:arrayofconst);其中,Msg参数是格式化字符串,与ShowMessage过程相同,其内容将显示在对话框中。Params参数提供了与Msg参数中格式符相匹配的内
容。例如:ShowMessageFmt('%s同学的正确答题数为%d',['张三',20]);第九章对话框下一页返回上一页Delphi面向对象程序设计9.1.3ShowMessagePos过程ShowMessagePos过程的作用与ShowMessage大致相同,但是可以
指定对话框的显示位置。语法格式为:procedureShowMessagePos(constMsg:string;X,Y:Integer);其中,Msg参数为对话框中要显示的文本内容,两个整形参数X和Y
用于指定对话框在屏幕中的显示位置。第九章对话框下一页返回上一页Delphi面向对象程序设计9.1.4MessageDlg函数MessageDlg函数的作用是在屏幕中央显示一个消息对话框。其语法格式为:
functionMessageDlg(constMsg:string;DlgType:TMsgDlgType;Buttons:TMsgDlgButtons;HelpCtx:Longint):Word;其中:•Msg参数为对话框中要显示的文本内容。•DlgType参数用于指定
对话框的类型。•Buttons参数用于指定对话框中要显示的按钮。•最终,MessageDlg函数将根据用户所单击的按钮,返回相应的Word类型的值。第九章对话框下一页返回上一页Delphi面向对象程序设计
9.1.5MessageDlgPos函数MessageDlgPos函数用于在屏幕指定位置显示一个对话框。其语法格式为:functionMessageDlgPos(constMsg:string;DlgType
:TMsgDlgType;Buttons:TMsgDlgButtons;HelpCtx:Longint;X,Y:Integer):Word;其中的参数与MessageDlg函数大多相同,参数X和Y用于指定对话框在屏幕中的显示位置。如果赋值为-1,将显示在屏幕中央。第九章对话框下一页返回上
一页Delphi面向对象程序设计9.1.6InputBox函数InputBox函数用于显示一个供用户输入字符串型、Double型或Integer型数据的对话框。其语法格式为:functionInputBox
(constACaption,APrompt,ADefault:string):string;其中:•ACaption参数用于指定对话框的标题•APrompt参数用于指定对话框中要显示的文本内容,通常是提示信息,
该参数中可以使用硬回车符来换行。•ADefault参数用于指定显示在输入编辑框中的默认文本。•该函数的返回值为String类型。第九章对话框下一页返回上一页Delphi面向对象程序设计9.1.7InputQuery函数InputQuery函数用于显示一个供用
户输入字符串、双精度数或整数的对话框。其语法格式为:functionInputQuery(constACaption,APrompt:string;varValue:string):Boolean;其中,ACapti
on和APrompt参数的作用与InputBox相同,需要注意的是Value参数。该参数是一个引用参数,因此在使用InputQuery函数时,需要一个string类型的实参变量,该变量的值将作为默认值显示在对话框内的编辑框中,若用户单击“OK”按钮,则输入的值将赋给该变量,并其
函数返回True;若用户单击“Cancel”按钮或按下键盘上的“ESC”键,则变量的值保持不变,函数返回False。第九章对话框下一页返回上一页Delphi面向对象程序设计9.1.8MessageBox函数MessageBox函数是TApplication
类的一个方法,用于显示一个特定的对话框。其语法格式为:functionMessageBox(constText,Caption:PChar;Flags:Longint=MB_OK):Integer;其中:•Text参数是显示在对话框中的文本内容,它可以超过255个字符长度,过长的消息在
对话框中会自动换行。•Caption参数将显示在对话框的标题中。•Flags参数用于指定对话框中要显示的按钮。•如果内存不足以生成对话框,则函数返回值为0,否则返回特定的值。第九章对话框下一页返回上一页Delphi面向对象程序设计9.2
公用对话框除了利用对话框函数和过程建立对话框之外,在Delphi的VCL面板的Dialogs页中,还提供了一系列标准的Windows公用对话框组件,利用这些组件可以方便地实现打开或者保存文件、设置字体、选择颜色、设置打印选项等多
种功能。第九章对话框下一页返回上一页Delphi面向对象程序设计9.2.1打开对话框(OpenDialog)打开对话框用于显示一个文件选择与打开的对话框。该组件在运行期间不可见,需要调用其Execute方法来显示。在该对话框中,用户选择了想要
打开的文件后,单击对话框中的“打开”按钮,被选中文件的全路径及其名称和扩展名就被存储在该对话框的FileName属性中。第九章对话框下一页返回上一页Delphi面向对象程序设计9.2.2另存为对话框(SaveDialog)另存为对话框组件用于提供一个标准的另存为对话框。用户在对话框中
可以选择要保存的文件名和存储路径。该对话框在运行时不会显示出来,必须调用其Execute方法来显示。用户单击其中的“保存”按钮后,对话框关闭,文件被保存,并且所选文件名及其全路径被存储在FileName属性中。由于TSaveDialog继承自TOpenDialog,因
此,另存为对话框的很多属性和方法与打开对话框相同。第九章对话框下一页返回上一页Delphi面向对象程序设计9.2.3字体对话框(FontDialog)字体对话框组件用于显示一个标准的Windows字体对话框。该对话框在运行时不会显示出来,必须调用其Execute方法。当用户在其中选
择了一种字体,并单击“确定”按钮时,对话框关闭,所选字体的相关信息,如字体名称、大小、样式、颜色、效果等,将被赋予对话框的Font属性。第九章对话框下一页返回上一页Delphi面向对象程序设计9.2.4颜色对话框(ColorDialog)颜色对话框组
件用于显示一个标准的Windows颜色对话框。该对话框在运行时不会显示出来,必须调用其Execute方法。当用户在其中选择了一种颜色,并单击“确定”按钮时,对话框关闭,所选颜色被赋予对话框的Color属性。第九章对话框下一页返回上一页Delphi面向
对象程序设计9.3系统提供的About窗体Delphi7中提供了专门的“关于”窗体模板,可以利用该模板快速建立“关于”窗体,其本质就是一个窗体。第九章对话框下一页返回上一页Delphi面向对象程序设计9.4自定义对话
框所谓自定义对话框,实际上就是自定义的窗体。在该窗体中,可以放置接受用户输入的Edit组件,比较典型的自定义对话框是用于接受输入用户名和密码的对话框。第九章对话框返回上一页Delphi面向对象程序设计Delphi面向对象程序设计第十章菜单和工具栏•本章内容主菜单组件Ma
inMenu弹出式菜单组件PopupMenu工具栏组件ToolBar状态栏组件StatusBar动作对象列表组件ActionListCoolBar组件和ControlBar组件菜单项和工具栏按钮的动态创建Delphi面向对象程序设计10.1主菜单组件(MainMenu)
主菜单组件位于组件板的Standard页,利用该组件可以很方便地完成菜单设计,只需进入菜单设计器设计所需的菜单项并且编写各个菜单项的OnClick事件代码即可。其中的每个菜单项都是一个TMenuItem对象。该组件的主要属
性是Items,第十章菜单和工具栏下一页返回Delphi面向对象程序设计10.2弹出式菜单组件(PopupMenu)PopupMenu组件位于组件板的Standard页,该组件用于建立弹出式快捷菜单。设计方式与MainMenu相同,最后将需要弹出该快捷菜单
的组件的PopupMenu属性指定为该PopupMenu组件的组件名即可。第十章菜单和工具栏下一页返回上一页Delphi面向对象程序设计10.3工具栏组件(ToolBar)ToolBar组件位于组件板的Win32页,在窗体上添加ToolBar组件后,默
认停靠在窗体客户区的最上端(标题栏和菜单栏的下方),并且宽度会自动适应窗体宽度的改变。工具栏上可以放置工具栏按钮和其他组件,添加的每一个按钮和分隔都是一个TToolButton对象,可以为每一个TToolButt
on对象设置属性和编写相应的事件。第十章菜单和工具栏下一页返回上一页Delphi面向对象程序设计10.4状态栏组件(StatusBar)状态栏用于显示程序的操作提示及当前状态等信息,一般位于窗体的底部。StatusBar组件位于组件板Win32页上,是
由若干个Panel组成的,每个Panel就是状态栏的一栏。其主要属性是Panels属性。第十章菜单和工具栏下一页返回上一页Delphi面向对象程序设计10.5动作对象列表组件(ActionList)ActionList组件可以集中处理许多常用的操作,把用户界面和
应用逻辑分开,减少程序代码的长度,方便程序的维护和调试。它位于组件板Standard页,双击该组件打开动作列表编辑器后就可以设计其中的动作,动作分为自定义的动作和系统预定义的动作。设计完动作列表后,只需将用户界面元素如:菜单项、工具栏按钮等与动作相关联即可。第十章菜单和工具栏下一页返回上一页D
elphi面向对象程序设计10.6CoolBar组件和ControlBar组件CoolBar和ControlBar组件主要用于容纳诸如ToolBar、ComboBox这样的组件,比较ToolBar来说效果更美观,其中CoolBar位于组件板的Win32页上,ControlBar位于组件板的Ad
ditional页,二者功能与界面效果相似。第十章菜单和工具栏下一页返回上一页Delphi面向对象程序设计10.7动态菜单项和工具栏按钮基本方法是:动态生成TMenuItem类和TToolButton类的实例;动态设置这些对象实例的相关属性,在代码中动态设置这些菜单项和工具栏按钮的OnCl
ick事件过程。把动态生成的TMenuItem和TToolButton的实例添加到相应的菜单和工具栏显示。第十章菜单和工具栏返回上一页Delphi面向对象程序设计Delphi面向对象程序设计第十一章文件操作和管理•本章内容文件系统组件和外壳(Shell)组件文本
文件有类型文件无类型文件文件流(FileStream)对象的操作注册表读写操作Delphi面向对象程序设计11.1文件系统组件和外壳(Shell)组件Win31页上的文件系统组件和Samples页上的外壳(Shell)组件可以实
现文件管理的功能,能够对驱动器、目录和文件列表进行显示和操作,类似于Windows的资源管理器。第十一章文件操作和管理下一页返回Delphi面向对象程序设计11.1.1文件系统组件文件系统组件包括驱动器下拉列表框组件DriveComboBox、目录列表
框组件DirectoryListBox、文件列表框组件FileListBox和文件类型过滤下拉列表框FilterComboBox等四个组件,这四个组件相互关联,通常只需要设置它们的关联属性即可。DriveComboBox组件的DirList属性设置为窗体上的Directo
ryListBox组件DirectoryListBox组件的FileList属性设置为窗体上的FileListBox组件FilterComboBox组件的FileList属性设置为窗体上的FileListBox组件FileListBox组件的
FileEdit属性设置为窗体上的Edit组件第十一章文件操作和管理下一页返回上一页Delphi面向对象程序设计11.1.2外壳(Shell)组件外壳组件包括ShellTreeView、ShellComboBox和ShellListView三个组件,与文件系统组件相同,这三个组
件相互关联,通常只需要设置它们的关联属性即可。设置ShellComboBox组件的ShellTreeView和ShellListView属性分别为另外两个组件;设置ShellTreeView组件的ShellComboBox
和ShellListView属性分别为另外两个组件;设置ShellListView组件的ShellComboBox和ShellTreeView属性分别为另外两个组件;第十一章文件操作和管理下一页返回上一页Delphi面向对象程序设计11.2文本文件文本文件是以行为单位进行读、写操作的。由于每一
行长度不一定相同,不能计算出给定行在文件中的确切位置,只能顺序地读写。而且文本文件只能单独为读或写而打开,在一个打开的文本文件上同时进行读、写操作是不允许的。文本文件类型的变量声明格式如下:varf:TextFile;第十一章文件操作和管理下一页返回上一页Delphi面向对象程序设计第十一章文
件操作和管理下一页返回上一页11.2文本文件Delphi中对文本文件的处理步骤可以归纳为以下五个过程:声明文本文件变量,如:varf:TextFile;将文件变量与指定的磁盘文件链接:Assign(f,FileName);打开文
件,打开文件有三种方式:①只读打开,用Reset过程打开一个已经存在的文件,如:Reset(f);②新建打开,用Rewrite过程新建一个文件,如果文件已经存在则被清空为0字节,如:Rewrite(f);③追加打开,用Append过程
打开一个已存在的文件并把文件指针定位到文件的末尾,如:Append(f);读写文件:Read、Write、Readln、Writeln关闭文件,用CloseFile函数关闭一个打开的文件,如:CloseFile(f);Delphi面向对象程序设计11.3有类型文件有类型文件
是一种具有一定数据类型的文件,它是由指定数据组成,读写过程所操作对象的单位是一个指定类型的数据。例如,我们可以这样定义一个整数文件类型的变量:varf:FileofInteger;在Delphi中我们经常使用的有类型文件是记录类型文件。第十一章文件操作和管理下一页返
回上一页Delphi面向对象程序设计11.3有类型文件对于有类型文件的操作,Readln和Writeln函数是不能使用的,所以我们要使用Read和Write函数来读写文件。另外,在有类型文件中经常使用的标准函数和过程是F
ilePos和Seek。注意,对于记录类型文件来说,FilePos函数返回的是当前记录的序号,Seek过程中的第二个参数也是要搜索的记录序号,都不是绝对位置的字节数。第十一章文件操作和管理下一页返回上一页Delphi面向对象程序设计11.4无类型文件无类型文件中存储的数
据是没有类型的,所以读写无类型文件需以字节为单位。使用Reset过程打开文件时,需要指定每次读写的字节数,默认为128字节,例如下面的代码:varf:File;//定义无类型文件变量……Reset(f,ByteNum);如果Re
set省略第二个参数,则对无类型文件每次读写操作以128个字节为单位。无类型文件的读写操作使用的是BlockRead和BlockWrite标准过程:procedureBlockRead(varF:File;varBuf;Cou
nt:Integer[;varAmtTransferred:Integer]);procedureBlockWrite(varf:File;varBuf;Count:Integer[;varAmtTransferred:Integer]);其
中,Buf是任意类型的缓冲区,Count是读写次数,即一次读写几个单位第十一章文件操作和管理下一页返回上一页Delphi面向对象程序设计11.5文件流(FileStrem)对象的操作文件流对象属于TFileStream类,由TFileStream类的构造方法Create创建,使用完毕后由F
ree方法释放,其构造方法为:constructorCreate(constFileName:string;Mode:Word);overload;其中,参数FileName为文件名,Mode表示打开文件方式;文件流对象的读写操作方法主要利用Read和Write函数。第十
一章文件操作和管理下一页返回上一页Delphi面向对象程序设计11.6注册表读写注册表是Windows操作系统中最重要的存放系统和应用程序各种配置的一个特殊文件,如果要修改操作系统的某些属性或者保存应用程序诸如安装路
径、启动配置等信息,就涉及到对注册表进行操作;也有很多应用程序利用注册表实现程序的注册机制。Delphi提供了一个专门的类TRegistry来操作注册表,利用TRegistry类的属性和方法可以很方便地对繁杂的系统注册表进行查询、读写等操作。第十一章文件操作和管理下一页返
回上一页Delphi面向对象程序设计11.6注册表读写在Delphi中操作注册表一般分为以下几个环节:创建注册表类TRegistry的实例对象;指定根键(RootKey),即设定TRegistry类的RootKey属性的值。例如:reg.RootKey:=H
KEY_CURRENT_USER;指定要操作的主键或创建主键。利用TRegistry的OpenKey方法和CreateKey方法,例如:reg.CreateKey('Software\MyDelphiProgram');reg.OpenKey('Soft
ware\MyDelphiProgram',False);关闭当前主键。如:reg.CloseKey;读写注册表键值信息。主要使用TRegistry类的Read系列和Write系列方法。释放创建的TRegistry对象。如:reg
.Free;第十一章文件操作和管理返回上一页Delphi面向对象程序设计Delphi面向对象程序设计第十二章图形图像和多媒体技术•本章内容画布对象(TCanvas)图像编程技术多媒体编程技术Delphi面向对象程序设计12.1画布对
象(TCanvas)画布对象是一个用于绘图的表面,在这个区域上,程序可实现各种绘图功能,很多组件(如Image,Memo)以及窗体Form的Canvas属性就是TCanvas对象。在组件或窗体上绘制图形就是在组件的画布上绘制。TCanvas对象的Brush,Pen,Fo
nt属性分别是TBrush,TPen,TFont对象,它们用于定制绘制图形的风格。第十二章图形图像和多媒体技术下一页返回Delphi面向对象程序设计12.1.1画布对象(TCanvas)TCanvas对象有很多方法,可完成常用的绘图功能:画线:LineTo(x,y:Integer);Move
To(x,y:Integer);画矩形:Rectangle(x1,y1,x2,y2:Integer);画圆或椭圆:Ellipse(x1,y1,x2,y2:Integer);画弧线:Arc(x1,y1,x
2,y2,x3,y3,x4,y4:Integer);画圆角矩形:RoundRect(x1,y1,x2,y2,x3,y3:Integer);画图像的方法:Draw(x,y:Integer;Graphic:TGraphic);StretchDra
w(ConstRect:TRect:Graphic:TGraphic);第十二章图形图像和多媒体技术下一页返回Delphi面向对象程序设计12.1.2TPen和TBrush对象TCanvas对象的Pen和Brush属性其实也是对象。应用程序常用画笔对象TPe
n在画布上绘制各种线段,画笔颜色在Color属性中定义,线段宽度在Width属性中定义,Style属性定义了线段类型;画刷对象TBrush用以填充图形,画刷的颜色定义在Color属性中。画刷还有一个运行期属性Bitmap,可使用位图填充图形以产生特殊效果,位图
大小为8个象素点高,8个象素点宽,Style属性定义了画刷填充图形的风格。第十二章图形图像和多媒体技术下一页返回Delphi面向对象程序设计12.2图像编程技术在这一节主要探讨Delphi编程中不同格式图像的显示和转换问题,Delphi中的Image组件支持的图像格式有限,
所以在编程中我们有时会采取生成图像对象的方法来显示图像以及处理图像格式的转换问题。第十二章图形图像和多媒体技术下一页返回上一页Delphi面向对象程序设计12.2.1图像组件(Image)Image组件主要用于在程序中显示图像,它位于组件面板的Add
itional页,其中显示的图像文件名由Picture属性决定,Transparent属性决定图像背景是否透明,它可以显示的图片种类有JPG、BMP、ICO、EMF和WMF等,但是要显示JPEG格式的图像,必须在程
序中包含JPEG单元,也就是在代码中加入:UsesJPEG;第十二章图形图像和多媒体技术下一页返回上一页Delphi面向对象程序设计12.3多媒体编程技术Delphi中的多媒体编程主要是通过动画组件Animate和多媒体组件MediaPl
ayer来实现的,这两个组件分别支持动画文件和电影、CD、声音、MIDI音乐等媒体文件的播放。Delphi本身的组件还不能支持流行的RM格式和MP3格式的媒体文件的播放。第十二章图形图像和多媒体技术下一页返回上一页Delphi面向对象程序设计12.3.1动画组件(Animat
e)动画组件Animate位于组件面板的Win32页上,其主要属性为FileName、Active、Transparent、Repetitions等,常用方法为Play和Stop。第十二章图形图像和多媒体技术下一页返回上一页Delphi面向对象程序设计12.3.2多媒体播放组件(MediaP
layer)MediaPlayer组件提供了一系列按钮用于控制诸如CD-ROM、MIDI、VCR等多媒体设备,这些多媒体设备可以是硬件也可以是软件。MediaPlayer组件不仅可以播放AVI文件,还可以播放很多媒体文件,比如WAV、MIDI、C
D音乐文件和DAT文件。它位于组件面板的System页中。使用时,只需设置其FileName属性指定要播放的文件名即可播放文件,另外也提供了很多属性和方法来实现更多的控制。第十二章图形图像和多媒体技术下一页返回上一页Delphi面向对象程序设计12.3.2多媒
体播放组件(MediaPlayer)MediaPlayer组件提供了一系列按钮用于控制诸如CD-ROM、MIDI、VCR等多媒体设备,这些多媒体设备可以是硬件也可以是软件。MediaPlayer组件不仅可以播放AVI文件,还可以
播放很多媒体文件,比如WAV、MIDI、CD音乐文件和DAT文件。它位于组件面板的System页中。使用时,只需设置其FileName属性指定要播放的文件名即可播放文件,另外也提供了很多属性和方法来实现更多的控制。第十二章图形图
像和多媒体技术下一页返回上一页Delphi面向对象程序设计Delphi面向对象程序设计第十三章数据库编程•本章内容Delphi自带数据库的使用利用FormWizard进行简单数据库应用程序开发基于BDE的数据库应用程序开发基于ADO的数据库应用程序开发基于dbExp
ress的数据库应用程序开发Delphi面向对象程序设计13.1Delphi自带数据库Delphi包含一个桌面数据库工具DatabaseDesktop,利用它可以创建基于文件的数据库系统(如dBase、Paradox、Foxpro等)。可以选择“DatabaseDesktop
”菜单项启动该工具。第十三章数据库编程下一页返回Delphi面向对象程序设计13.2FormWizardDelphi中提供了一个简单的数据库应用程序向导,即FormWizard。利用该向导,可以创建一个简单的数据库应用程序,实现数据的浏览和简单操作。在该向导中可以选择数据集为Table
或者Query、建立单窗体或者主/从窗体,还可以选择窗体的布局方式。第十三章数据库编程下一页返回Delphi面向对象程序设计13.3基于BDE的数据库应用程序开发13.3.1BDE(BorlandDa
tabaseEngine)是Borland公司开发的数据库引擎,用于操作不同的数据库驱动程序。开发人员只需要以统一的方式和数据库引擎建立联系,就能访问不同的数据库。可以大大简化数据库应用程序的开发。在使用前,需要在BDEAdminist
rator中配置BDE,建立数据库别名。第十三章数据库编程下一页返回Delphi面向对象程序设计13.3基于BDE的数据库应用程序开发13.3.2基于BDE的数据库应用程序结构第十三章数据库编程下一页返回上一页数
据控制组件(DBGrid、DBEdit等)数据源组件(DataSource)数据集组件(Table、Query等)BDEDBDelphi面向对象程序设计13.3基于BDE的数据库应用程序开发13.3.3利用Table组件
开发(1)1.使用Table、DataSource、DBGridTable作为数据集组件,其作用是连接数据库中的一张表,因此,需要依次设置其DatabaseName属性(BDE中的别名)、TableName属性;DataSource是数据源组件,通常需要设置
其DataSet属性;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)Query组件的作用是使用SQL命令对数据库进行访问。它也属于数据集组件,通常需要设置其DatabaseName属性和SQL属性。SQL属性的设置可以
在设计期间在对象观察器中进行设置,也可以在代码中动态设置。例13-9第十三章数据库编程下一页返回上一页Delphi面向对象程序设计13.3基于BDE的数据库应用程序开发13.3.6利用Query组件开发(2)在代码中对Query的SQL进行动态编程通常需要如下步骤:Que
ry1.Close;Query1.SQL.Clear;Query1.SQL.Add(„此处为SQL语句’);Query1.Open/ExecSQL;其中,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的数据库应用程序开发基于ADO的数据库应用程序开发的常用步骤如下:1.利用ADOConnection组件建立与数据库的连接;2.设置ADO的数据集组件,如ADOTable、ADOQuery等,用于从数据库中引入数据
;3.设置DataSource组件作为数据集组件和数据访问组件之间的桥梁;4.利用数据访问组件或其他组件设计用户界面。例13-13第十三章数据库编程下一页返回上一页Delphi面向对象程序设计13.5基于dbExpress的数据库应用程序开发基于dbE
xpress的数据库应用程序开发的常用步骤如下:1.利用SQLConnection组件建立与数据库的连接;2.设置SQLDataSet等数据集组件,用于从数据库中引入数据;3.设置DataSetProvider组件的DataSet属性为SQLDataSet;设置ClientDa
taSet的ProviderName属性;以此获得本地数据集。4.设置DataSource组件作为数据集组件和数据访问组件之间的桥梁;4.利用数据访问组件或其他组件设计用户界面。例13-14第十三章数据库编程下一页返回上一页