Delphi编程语言ObjectPascal讲义_第1页
Delphi编程语言ObjectPascal讲义_第2页
Delphi编程语言ObjectPascal讲义_第3页
Delphi编程语言ObjectPascal讲义_第4页
Delphi编程语言ObjectPascal讲义_第5页
已阅读5页,还剩105页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Delphi编程语言ObjectPascal讲义1.1认识Delphi

感受Delphi编程Delphi的特点Delphi编程环境及其作用Delphi应用程序的文件组成Delphi中几个重要概念Delphi学习方法★本节要点练习感受Delphi编程下面在Delphi的集成开发环境中编写一个最简单程序,并运行。让大家对Delphi的编程有一种感性认识,并体验Delphi快捷、方便、高效的编程环境。演示Delphi的特点Delphi最早是Borland公司于1994年底发布的一种可视化编程语言。它以ObjectPascal作为基本开发语言。目前已从Delphi1.0发展到Delphi7.0。它适用于Windows9x,Windowsxp,Windows2000或更高的版本操作系统,同时也推出Lynux操作系统下的kylix版本。编程效率高、代码质量好领先的数据库技术强大的Internet应用开发功能与Office的巧妙结合可视化编程语言编程语言的发展机器语言→汇编语言→高级语言(结构化→面向对象→可视化)面向对象的程序设计(ObjectOrientedProgramming)可视化(Visual)编程语言

Delphi,VFP,VB,VC等,由组件来构造应用程序。面向对象的程序设计对象:把要处理的数据和处理这些数据的方法组合成的一种数据类型。对象有如下三大特性:封装性:把数据和处理数据的方法定义在同一数据类型(对象)中,一般只能用该对象中的方法来处理这些数据。继承性:可以用已定义的对象来构造其子对象,并且子对象可以访问其父对象中的数据和方法。多态性:为动作赋予一个可由对象序列共享的名称,对象序列中的每个对象均以适合于自身的方式实现该操作。事件驱动对象的多态性实例implementation{$R*.DFM}typeTPerson=className:string;weight:integer;constructorCreate(aName:string;aWeight:integer);functionGetTitle:string;virtual;//父类中使用虚方法

functionGetInformation:string;end;TStudent=class(TPerson)School:string;ConstructorCreate(aname:string;aWeight:integer;aSchool:string);functionGetTitle:string;override;//子类中使用覆盖

end;constructorTPerson.Create(aName:string;aWeight:integer);begininheritedcreate;name:=aname;weight:=aweight;end;functionTPerson.GetTitle:string;beginresult:=Name+'isaPerson';end;对象的多态性实例(续)ConstructorTStudent.Create(aname:string;aWeight:integer;aSchool:string);begininheritedcreate(aname,aweight);school:=aschool;end;functionTStudent.GetTitle:string;beginresult:=Name+'isaStudentof'+school;end;procedureshowtitle(Person:TPerson);beginshowmessage(person.getInformation);end;procedureTForm1.Button1Click(Sender:TObject);varaPerson:TPerson;aStudent:TStudent;beginaPerson:=TPerson.create('David',60);AStudent:=TStudent.create('Young',65,'Tsinghua');showtitle(aperson);//显示某人相关的信息

showtitle(aStudent);//显示某学生相关的信息

aperson.free;astudent.free;end;Delphi编程环境及其作用菜单栏与工具栏组件(Component)栏对象树状列表(ObjectTreeView)对象监视器(ObjectInspector)窗体设计器(FormDesigner)代码编辑器(CodeEditor)项目管理器(ProjectManager)Delphi应用程序的文件组成Delphi应用程序的文件主要有:工程文件(.DPR);单元文件(.PAS);窗体文件(.DFM)等。Delphi中几个重要概念类(Class):Delphi中的对象类型数据,它由类的成员构成。对象:类数据类型的实例。组件:组成应用程序的构件,其类型一般为类类型。我们常用的是组件的属性、方法及事件。组件的事件:能够把发生于某一组件上的操作同一指定的方法进行关联。当该操作发生时会自动执行指定的方法。窗体或窗体上的组件接收事件,事件可由用户引发(例如键盘或鼠标操作),可由系统引发(例如定时器事件),也可由代码间接引发(例如当代码装载其他窗体时产生的Load事件)类的成员域(字段):类中的数据。方法:类中的过程或函数。属性:类似于类中的域,但它本身并不占存储空间,对它进行存取操作,可以是直接存取,也可以是调用相应的方法,它可以是只读,只写或读写。Delphi学习方法转变编程思维方式重视上机应用为主多参考他人的编程经验和技巧(Delphi参考书,Delphi网站)Delphi网站Delphi专家:Delphi园地:Delphi程序员之家:5.Delphi学习方法本节要点(1.1)熟悉Delphi集成开发环境主要组成部分及其作用:菜单栏与工具栏,组件栏,对象树状列表,对象监视器,窗体设计器,代码编辑器,项目管理器等。掌握Delphi应用程序的文件组成:项目文件(.DPR);单元文件(.PAS);窗体文件(.DFM)等。了解几个重要概念:类,对象,组件,组件的属性、方法及事件等。练习(1.1)理论1.Delphi集成开发环境主要有哪几个部分组成,并说明各部分的作用。2.一个Delphi应用程序主要由哪些文件组成?3.预习ObjectPascal上机实训教程1.1,1.21.2Objectpascal语言基础

标识符数据类型变量和常量运算符和表达式语句过程和函数程序和单元★本节要点练习标识符标识符必须由字母(A—Z、a—z)、数字(0—9)或下划线组成,不区分字母的大小写。标识符的第一个字符必须是字母或下划线。标识符的长度不应超过255个字符,如果超过255字符就只有前255个有效。不能将保留字用作标识符,如IF、AND、DO等。尽量不要重新定义已预定义的标识符,如一些标准的数学函数Sqrt、Sin等。数据类型

有序类型(ordinal)

实型(real)*整型(integer)*字符型(character)*布尔型(Boolean)*枚举(enumerated)子界(subrange)数组(array)*记录(record)*集合(set)文件(file)类(class)*类引用(classreference)接口(interface)简单类型(simple)字符串类型(string)*构造类型(structured)变体类型(variant)*指针类型(pointer)*过程类型(procedural)整型(integer)常用整型:Integer -2147483648~2147483647 有符号4字节Cardinal 0~4294967295无符号4字节基本整型:Shortint -128~127 有符号1字节Smallint -32768~32767 有符号2字节Longint -2147483648~2147483647 有符号4字节Int64 263~263-1 有符号8字节Byte 0~255 无符号1字节Word 0~65535 无符号2字节Longword 0~4294967295 无符号4字节字符型(character)常用字符型:Char ANSI字符集1字节表示:'a'或#97''''或#39''空格基本字符型:AnsiCharANSI字符集1字节WideCharUnicode字符集(前256个是ANSI字符集)2字节布尔型(Boolean)Boolean(1字节)False<True Ord(False)=0Ord(True)=1 Pred(True)=FalseSucc(False)=TrueByteBool(1字节),WordBool(2字节),LongBool(4字节)False<>TrueOrd(False)=0Ord(True)<>0Pred(False)=TrueSucc(False)=True枚举(enumerated)type类型名=(标识符1,标识符2,…标识符n);如:typeTMyColor=(mcRed,mcBlue,mcGreen,mcYellow,mcOrange);Answer=(ansYes,ansNo,ansMaybe);其对应的序号为0,1,2…子界(subrange)typeSomeNumbers=-128..127;Caps='A'..'Z';typeTColors=(Red,Blue,Green,Yellow,Orange,Purple,White,Black);TMyColors=Green..White;实型(real)常用实型Real ±5.0×10-324

~1.7×10308 8字节基本实型Real48 ±2.9×10-39

~1.7×1038 6字节Single ±1.5×10-45

~3.4×1038 4字节Double ±5.0×10-324

~1.7×10308 8字节 E×tended ±3.6×10-4951

~1.1×104932 10字节Comp -263+1~263 8字节Currency -922337203685477.5808~922337203685477.58078字节 字符串类型(string)常用字符串String {$H+}AnsiString,{$H-}ShortString 'BORLAND'{BORLAND}'You''llsee'{You'llsee}''{无字符}'Line1'#13#10'Line2''中华人民共和国'基本字符串ShortString 255个字符AnsiString ~231

个字符WideString ~230个字符数组(array)type类型名=array[有序类型]of基类型;如:typeMyArray=array[1..100]ofChar;type

TMatrix=array[1..10,1..50]ofReal;记录(record)type类型名=record

域名:类型;...

域名:类型;end;如:typeTDateRec=recordYear:Integer;Month:(Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec);Day:1..31;end;集合(set)Type类型名=setof有序类型;如:typeTIntSet=setof1..250;setofByte;setof(Club,Diamond,Heart,Spade);setofChar;集合值表示:[1,3,5,7,9],['a','b','c']文件(file)typePhoneEntry=recordFirstName,LastName:string[20];PhoneNumber:string[15];Listed:Boolean;end;PhoneList=PhoneEntry;类(class)typeTListColumns=class(TCollection)privateFOwner:TCustomListView;functionGetItem(Index:Integer):TListColumn;procedureSetItem(Index:Integer;Value:TListColumn);protectedfunctionGetOwner:TPersistent;override;procedureUpdate(Item:TCollectionItem);override;publicconstructorCreate(AOwner:TCustomListView);functionAdd:TListColumn;propertyOwner:TCustomListViewreadFOwner;propertyItems[Index:Integer]:TListColumnreadGetItemwriteSetItem;default;end;//类不能定义在函数或过程中类引用类型(classreference)Type类引用类型名=classof类类型;如:typeTClass=classofTObject;Varanyobj:Tclass;Anyobj变量可以引用任何其他类。类引用类型在用户要调用一个类的方法,但编译时又不知道该类的类型时非常有用。接口(interface)type接口名=interface(父接口)

各类中共同的方式或属性列表end;它体现的是多个互不相关的类之间的相同行为。变体类型(variant)变体类型与其他数据类型结合使用会产生类型的自动转换。varV1,V2,V3,V4,V5:Variant;I:Integer;D:Double;S:string;beginV1:=1;{integervalue}V2:=1234.5678;{realvalue}V3:='Helloworld!';{stringvalue}I:=V1;{I=1(integervalue)}D:=V2;{D=1234.5678(realvalue)}S:=V3;{S='Helloworld!'(stringvalue)}指针类型(pointer)type指针类型名=^类型对字符串类型和类类型,其内部实现方式均用指针。但为方便使用,Delphi把许多运用指针的地方隐藏起来,用户在编制程序时可以不把其当作指针来处理,而让Delphi来处理容易出错的问题。过程类型typeTIntegerFunction=function:Integer;TProcedure=procedure;TStrProc=procedure(constS:string);TMathFunc=function(X:Double):Double;变量和常量变量常量真常量类型常量变量var变量名1,变量名2…,变量名n:类型;如:(全局变量在说明时还可以给初值)varX,Y,Z:Double;I,J,K:Integer;Digit:0..9;Okay:Boolean;CrtMode:Byteabsolute$0040;s:string;//字符串变量访问

rd:TDateRec;//记录变量访问字符串变量访问(S:String)作为字符串来访问S:='abcde';作为单个字符来访问S[1],s[2],s[3]等访问单个字符,类似于数组中的每个元素。记录变量访问(rd:TDateRec)点域访问Rd.year:=2001;rd.month:=feb;rd.day:=12;With…do访问Withrddoyear:=2001;typeTDateRec=recordYear:Integer;Month:(Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec);Day:1..31;end;真常量const常量名=常量表达式;constMin=10;Max=$100;Center=(Max-Min)div2;Beta=Chr(225);NumChars=Ord('Z')-Ord('A')+1;Message='Outofmemory';ErrStr='Error:'+Message+'.';ErrPos=80-Length(ErrStr)div2;Ln10=2.3045684;Ln10R=1/Ln10;Numeric=['0'..'9'];Alpha=['A'..'Z','a'..'z'];AlphaNum=Alpha+Numeric;类型常量const常量名:类型=值;(兼容老版本,要加编译开关{$j+};现在可以直接在全局变量中赋初值)Consti:integer=23;Digits1:array[0..4]ofChar=('0','1','2',3',4');Digits2:array[0..4]ofChar='01234';typeTCube=array[0..1,0..1,0..1]ofInteger;TMonth=(Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec);TDate=recordD:1..31;M:TMonth;Y:1900..1999;end;constMaze:TCube=(((0,1),(2,3)),((4,5),(6,7)));SomeDay:TDate=(D:2;M:Dec;Y:1960);运算符和表达式算术运算(Arithmeticoperator)关系运算(Relationaloperator)布尔运算(Booleanoperator)位运算(bitwiseoperator)字符串运算(Stringoperator)集合运算(Setoperator)指针运算(Pointeroperator)类运算(Classoperator)取地址操作(@)运算符的优先级算术运算(Arithmeticoperator)算术运算符:+,–*,/,div(整除),mod(取余)运算量有整型、实型等,div和mod只能是整型,结果类型同运算量。例:5/2→2.55div2→25mod2→15mod–2→1-5mod2→-1-5mod-2→-1关系运算(Relationaloperator)关系运算符有=,<>,<,>,<=,>=运算量有简单类型、字符串类型等,结果为布尔类型。例:60>=30→true2.54<-43.2→false'abcde'<'aBcde'→flaseTrue>false→true布尔运算(Booleanoperator)布尔运算符有not,and,or,xor运算量和结果均只能为布尔类型。例:Trueandfalse→falseFlaseor(60>=30)→true位运算(bitwiseoperator)位运算符有not,and,or,xor,shl,shr 运算量和结果均只能为整型。例:Byte(Not$ff)→$00Byte($10and$11)→$10Byte($10or$1b)→$1bByte($20xor$21)→$01Byte($10shl2)→$40Byte($20shr1)→$10字符串运算(Stringoperator)字符串运算符主要指连接两个字符串的运算符+例:‘Iama'+'student.'→‘Iamastudent.'‘文件名:'+'abc.doc'→‘文件名:abc.doc'集合运算(Setoperator)集合运算符有+(并),-(差),*(交),<=(被包含),>=(包含),=(相等),<>(不等),in(成员检查)指针运算(Pointeroperator)指针运算符有+,-,=,<>,^类运算(Classoperator)类运算符有as,isAs:将一个类实例转换为另一个类型的类。如:SenderasTButtonIs:用来判断一个类实例的类型,结果为布尔型。如:SenderisTComponet取地址操作(@)@是单目运算符,其作用是返回变量的地址。运算符的优先级@,not*,/,div,mod,and,shl,shr,as+,-or,xor=,<>,<,>,<=,>=,in,is高低语句注释符单行注释符//;多行注释符{…}或(*…*)说明语句对数据类型、变量、常量、标号、函数及过程等进行声明的语句,编译后不生成可执行代码。语句以分号结束。赋值语句和复合语句选择语句循环语句With语句赋值语句和复合语句赋值语句(变量名:=表达式)X:=Y+Z;Done:=(I>=1)and(I<100);I:=Sqr(J)-I*K;SomeArray[I+1]:=P^;TMyObject.SomeProperty:=True;复合语句(把多个语句组合成一个语句)beginZ:=X;X:=Y;Y:=Z;end;选择语句If语句Case语句Goto语句If语句ifJ=0thenExit//此处不能用';'elseResult:=I/J;注:过程exit将终止子程序ifJ<>0thenbeginResult:=I/J;Count:=Count+1;End//此处不能用';'elseifCount=LastthenDone:=True//此处不能用';'elseExit;if布尔型表达式then语句1[else语句2]Case语句case有序类型表达式of

选择项1:语句1;...

选择项n:语句n;[else

语句;]End注:各选择项中的值要唯一。caseIof1..5:Caption:='Low';6..9:Caption:='High';0,10..99:Caption:='Outofrange';elseCaption:='';end;Goto语句labelStartHere//说明一个标号..StartHere:Beep;gotoStartHere;注:标号可以是标识符或0~9999的数。循环语句For语句while语句Repeat语句For语句for有序类型变量:=初值to终值do语句或for:=初值downto终值do语句注:有序类型变量的值增(to)减(downto)1,越过终值结束循环。max:=data[1];forI:=2to12doifData[I]>MaxthenMax:=Data[I];while语句while布尔表达式do语句注:布尔表达式为false结束循环。max:=data[1];I:=2;WhileI<=12doBeginifData[I]>MaxthenMax:=Data[I];I:=I+1;End;Repeat语句repeat

语句1;...;

语句2;until布尔表达式;注:布尔表达式为true结束循环。max:=data[1];I:=2;RepeatifData[I]>MaxthenMax:=Data[I];I:=I+1;UntilI>12;With语句访问记录中的数据域或类中的成员(域,属性或方法)。①withobjdo语句注:指类或记录类型变量的名字,下同。②withobj1,...,objndo语句或withobj1dowithobj2do...withobjndo

语句注:obj1,...,objn等分别作用于与其对应的各自成员,可嵌套。举例With语句举例withedit1dobegintext:='时间';//相当于edit1.text:='时间';enable:=false;//相当于edit1.enable:=false;end;withlabel1,edit1dobeginCaption:='labelone';//相当于label1.Caption:='labelone';Text:='textone';//相当于edit1.Text:='textone';end;withform1,edit1doText:='textone';//相当于form1.edit1.Text:='textone';过程和函数过程函数常用过程或函数过程procedure过程名(形参列表);——过程头[类型声明][常量声明][变量声明][过程声明][函数声明]begin

语句;end;注:作为语句来调用。举例说明部分语句部分过程体过程举例//把整型数转化为字符串procedureNumString(N:Integer;varS:string);varV:Integer;beginV:=Abs(N);S:='';repeatS:=Chr(Vmod10+Ord('0'))+S;V:=Vdiv10;untilV=0;ifN<0thenS:='-'+S;end;//NUmString(234,x)函数function函数名(形参列表):类型;——函数头[类型声明][常量声明][变量声明][过程声明][函数声明]begin

语句;end;注:可作为语句或值来调用。说明部分语句部分函数体举例函数举例//求x的y次方functionPower(X:Real;Y:Integer):Real;varI:Integer;beginResult:=1.0;//Result代表函数值

I:=Y;whileI>0dobeginifOdd(I)thenResult:=Result*X;I:=Idiv2;X:=Sqr(X);end;end;//p:=power(2.0,3)常用过程或函数(sysutils或system单元)Abs求绝对值Sqr求平方值Sqrt求平方根Sin求正弦Cos求余弦Exp求e的幂Ln求自然对数Pi3.14932385Date取日期Time取时间Length求字符串的长度Pos求子串的位置Delete删除子串Copy复制字符串ChrASCII值对应的字符Ord取得序号Round实型四舍五入为整型Trunc实型取整Inttohex整型变为十六进制数串Inttostr整型变为字符串Strtoint字符串变为整型Datetostr日期变为字符串Upcase转化为大写字母Uppercase转化为大写字符串Lowercase转化为小写字符串Random产生一个随机数Odd判定奇数程序和单元举例program程序名;——程序头[uses子句]——引用单元[类型声明][常量声明][变量声明][过程声明][函数声明]begin

语句;End.——程序结束说明部分语句部分程序体程序举例programEditor;//程序对应的文件名(.dpr)必须与程序名相同。UsesForms,REAboutin'REABOUT.PAS'{AboutBox},REMainin'REMain.pas'{MainForm};{$R*.RES}//编译指示beginApplication.Title:='TextEditor';Application.CreateForm(TMainForm,MainForm);Application.Run;end.单元unit单元名;——单元头Interface[uses子句]——引用其它单元接口部分implementation[uses子句]——引用其它单元实现部分[initialization

初始化代码][finalization

结束代码]end.——单元结束举例单元举例unitUnit1;//单元对应的文件名(.pas)必须与单元名相同interfaceusesWindows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs;typeTForm1=class(TForm)Button1:TButton;procedureButton1Click(Sender:TObject);private{Privatedeclarations}public{Publicdeclarations}end;varForm1:TForm1;implementation{$R*.DFM}procedureTForm1.Button1Click(Sender:TObject);beginclose;end;end.本节要点(1.2)会使用Delphi的帮助系统(ObjectPascalReference主题)查阅ObjectPascal的各语法要素逐渐熟悉ObjectPascal的常用数据类型、变量、常量、运算符和表达式,并掌握它们的用法。熟悉各语句的格式和用法,并使用本讲稿中的各示例编写完整程序,来验证各语句的用法。逐渐掌握过程和函数的编写和调用。熟悉程序和单元的结构。练习(1.2)理论教程P28-30选择题1-5,简答题2-3上机实训教程1.3,1.4补充:使用Delphi编写一实现排序功能的程序。演示1.3Delphi中的程序调试及异常处理程序调试异常处理★本节要点练习程序调试程序设计中的错误类型设置编译选项控制程序的执行使用监视列表窗口(WatchList,Ctrl+F5)使用求值/修改对话框(Evaluate/modify,Ctrl+F7)程序设计中的错误类型设计期错误编译期错误运行期错误逻辑错误设计期错误

这一类型的错误较容易发现和纠正,因为DelPhi能对特定的值进行合法性检查,发现这类错误,DelPhi将显示一个警告窗口,以提示用户纠正错误。

这种错误类型发生在使用DelPhi进行可视化设计的时候,通常是因为给组件的某个属性输入了非法的值。例如按钮组件TBitBtn的NumGlyphs属性取值为1..4,若输入的值不在此范围,则发生错误。编译期错误

编译期错误也称为语法错误。在DelPhi中,通常是当程序代码违反了objectPascal语言的语法规则时发生这类错误。比较常见的语法错误有标识符未定义或拼写错误;语句的末尾漏掉分号;赋值语句中漏写昌号;begin与end末配对;括号末配对;引号末配对等。

如果程序代码中有语法错误,编译不能通过,代码编辑器的状态行将给出错误信息提示,并加亮有语法错误的代码行。运行期错误

程序虽然通过了编译,但运行失败,这种错误称为运行期错误,例如应用程序试图打开一个不存在的文件,或者运算时出现被零除等情况。DelPhi能够检测出这类错误,并退出当前模块。此时,如果不能确定错误发生在什么地方,可以用DelPhi内部集成的调试器查找错误的位置。例如可以用单步执行命令,让程序一条语句一条语句地执行,或者添加一个监视窗口,观察某个变量的变化情况。逻辑错误举例

逻辑错误是指程序通过了编译,也能执行,但执行的结果跟预期的不同。

逻辑错误有时比较难找,因为Delphi不能自动识别这类错误。这时就需要用到内部集成的调试器,通过控制程序的运行、监视程序的输出或观察变量的值,把错误逐步定位在一个较小的范围内。举例(逻辑错误)编程实现符号函数的功能:varx,y:real;beginx:=-2;y:=0;ifx>=0thenifx>0theny:=1elsey:=-1;showmessage(floattostr(y));end;设置编译选项

设置编译选项用来控制Delphi程序的编译方式。

可以使用如下二种方法进行设置:(1)使用Delphi菜单Project/Options--Compiler(2)在程序中加{$Z+}或{$Z-}设置或清除编译选项,其中Z为编译开关字母。

建议,在程序调试时,将所有检查性的选项设置上,优化特性清除,以利于调试;当程序调试通过后,应把那些加重程序时间、空间负担的编译开关清除,设置优化代码功能,再编译一次,以生成简练的可执行文件。编译选项1代码生成(Codegeneration)编译选项2运行时的错误(Runtimeerrors)信息(Messages)编译选项3语法选项(Syntaxoptions)编译选项4调试(Debugging)举例举例(Rangechecking){$R+}或{$R-}vara:array[1..3]ofbyte;i:integer;beginfori:=1to4dobegina[i]:=i;showmessage(inttostr(a[i]));end;end;控制程序的执行设置断点(ToggleBreakpoint/F5)执行到光标处(Runtocursor/F4)单步执行(TraceInto/F7,StepOver/F8)举例举例(控制程序的执行)编程实现符号函数的功能:varx,y:real;beginx:=-2;y:=0;ifx>=0thenifx>0theny:=1elsey:=-1;showmessage(floattostr(y));end;异常处理Delphi对异常的自动处理编程人员对异常的处理Try…except语句Raise语句Try…finally语句自定义异常类及其使用Delphi对异常的自动处理Delphi为应用程序提供了一套缺省的自动异常处理机制,即当前模块发生错误后退出当前模块并给出错误信息,而并不立即引起应用程序的中止。若程序在Delphi的集成开发环境中运行,在给出相应错误信息的同时,还尽可能定位出错的位置。例如:vari:integer;r:real;begini:=0;r:=8/i;showmessage(floattostr(r));end;Try…except语句(格式1)格式1:Try

语句Except

语句End;功能:若执行Try与Except之间的语句发生异常,则执行Except与End之间的语句对该异常作出处理,并清除异常,否则(没有异常)跳过Except与End之间的语句。举例举例(格式1)举例:vari:integer;r:real;begini:=0;tryr:=8/i;showmessage(floattostr(r));exceptshowmessage('除数为零');end;end;Try…except语句(格式2)格式2:Try

语句Excepton[标识符:]异常类do语句

on[标识符:]异常类do语句

……………End;功能:当执行Try与Except之间的语句发生异常时,依次查找on后的异常类,直到发现某个匹配的异常类即执行其do后语句,并清除异常,然后跳过Try与Except结构,执行end后的语句。若在on后没有找到匹配的异常类,则异常仍然存在。举例举例(格式2)vari,j:integer;r:real;beginj:=20;tryi:=strtoint(edit1.Text);j:=10divi;r:=10/(i-1);showmessage('正常,j='+inttostr(j)+',r='+floattostr(r));exceptonE:EConvertErrordoshowmessage('异常,非数值'+#13+E.Message);onEDivByZerodoshowmessage('异常,整数被0除');onEZeroDividedoshowmessage('异常,实数被0除');end;end;Try…except语句(格式3)格式3:Try

语句Excepton[标识符:]异常类do语句

on[标识符:]异常类do语句

……………else

语句End;功能:当执行Try与Except之间的语句发生异常时,依次查找on后的异常类,直到发现某个匹配的异常类即执行其do后语句,若在on后没有找到匹配的异常类,则执行else后的语句,并清除异常。举例举例(格式3)vari,j:integer;r:real;beginj:=20;tryi:=strtoint(edit1.Text);j:=10divi;r:=10/(i-1);showmessage('正常,j='+inttostr(j)+',r='+floattostr(r));//rai

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论