版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1章Delphi的编程语言——ObjectPascal1.1认识Delphi1.2ObjectPascal语言基础1.3Delphi中的程序调试及异常处理本章小结第1章Delphi的编程语言——ObjectPascal11.1认识Delphi
感受Delphi编程Delphi的特点Delphi编程环境及其作用Delphi应用程序的文件组成Delphi中几个重要概念Delphi学习方法★本节要点练习1.1认识Delphi感受Delphi编程2感受Delphi编程下面在Delphi的集成开发环境中编写一个最简单程序,并运行。让大家对Delphi的编程有一种感性认识,并体验Delphi快捷、方便、高效的编程环境。演示感受Delphi编程下面在Delphi的集成开发环境中编写一3Delphi的编程语言ObjectPascal课件4Delphi的编程语言ObjectPascal课件5面向对象的程序设计对象:把要处理的数据和处理这些数据的方法组合成的一种数据类型。对象有如下三大特性:封装性:把数据和处理数据的方法定义在同一数据类型(对象)中,一般只能用该对象中的方法来处理这些数据。继承性:可以用已定义的对象来构造其子对象,并且子对象可以访问其父对象中的数据和方法。
多态性:为动作赋予一个可由对象序列共享的名称,对象序列中的每个对象均以适合于自身的方式实现该操作。事件驱动面向对象的程序设计对象:把要处理的数据和处理这些数据的方法组6对象的多态性实例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;对象的多态性实例implementation7对象的多态性实例(续)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;对象的多态性实例(续)8Delphi编程环境及其作用菜单栏与工具栏组件(Component)栏对象树状列表(ObjectTreeView)对象监视器(ObjectInspector)窗体设计器(FormDesigner)代码编辑器(CodeEditor)项目管理器(ProjectManager)Delphi编程环境及其作用菜单栏与工具栏9Delphi应用程序的文件组成Delphi应用程序的文件主要有:工程文件(.DPR);单元文件(.PAS);窗体文件(.DFM)等。Delphi应用程序的文件组成Delphi应用程序的文件主要10Delphi中几个重要概念类(Class):Delphi中的对象类型数据,它由类的成员构成。对象:类数据类型的实例。组件:组成应用程序的构件,其类型一般为类类型。我们常用的是组件的属性、方法及事件。组件的事件:能够把发生于某一组件上的操作同一指定的方法进行关联。当该操作发生时会自动执行指定的方法。窗体或窗体上的组件接收事件,事件可由用户引发(例如键盘或鼠标操作),可由系统引发(例如定时器事件),也可由代码间接引发(例如当代码装载其他窗体时产生的Load事件)Delphi中几个重要概念类(Class):Delphi中的11类的成员域(字段):类中的数据。方法:类中的过程或函数。属性:类似于类中的域,但它本身并不占存储空间,对它进行存取操作,可以是直接存取,也可以是调用相应的方法,它可以是只读,只写或读写。类的成员域(字段):类中的数据。12Delphi学习方法转变编程思维方式重视上机应用为主多参考他人的编程经验和技巧(Delphi参考书,Delphi网站)Delphi学习方法转变编程思维方式13Delphi网站Delphi专家:Delphi园地:Delphi程序员之家:5.Delphi学习方法Delphi网站Delphi专家:wpghydelphi.14本节要点(1.1)熟悉Delphi集成开发环境主要组成部分及其作用:菜单栏与工具栏,组件栏,对象树状列表,对象监视器,窗体设计器,代码编辑器,项目管理器等。掌握Delphi应用程序的文件组成:项目文件(.DPR);单元文件(.PAS);窗体文件(.DFM)等。了解几个重要概念:类,对象,组件,组件的属性、方法及事件等。本节要点(1.1)熟悉Delphi集成开发环境主要组成部分15练习(1.1)理论1.Delphi集成开发环境主要有哪几个部分组成,并说明各部分的作用。2.一个Delphi应用程序主要由哪些文件组成?3.预习ObjectPascal上机实训教程1.1,1.2练习(1.1)理论161.2Objectpascal语言基础
标识符数据类型变量和常量运算符和表达式语句过程和函数程序和单元★本节要点练习1.2Objectpascal语言基础标识符17标识符标识符必须由字母(A—Z、a—z)、数字(0—9)或下划线组成,不区分字母的大小写。标识符的第一个字符必须是字母或下划线。标识符的长度不应超过255个字符,如果超过255字符就只有前255个有效。不能将保留字用作标识符,如IF、AND、DO等。尽量不要重新定义已预定义的标识符,如一些标准的数学函数Sqrt、Sin等。标识符标识符必须由字母(A—Z、a—z)、数字(0—9)或下18数据类型
有序类型(ordinal)
实型(real)*整型(integer)*字符型(character)*布尔型(Boolean)*枚举(enumerated)子界(subrange)数组(array)*记录(record)*集合(set)文件(file)类(class)*类引用(classreference)接口(interface)简单类型(simple)字符串类型(string)*构造类型(structured)变体类型(variant)*指针类型(pointer)*过程类型(procedural)数据类型有序类型(ordinal)整型(intege19整型(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字节整型(integer)常用整型:20字符型(character)常用字符型:Char ANSI字符集1字节表示:'a'或#97''''或#39''空格基本字符型:AnsiCharANSI字符集1字节WideCharUnicode字符集(前256个是ANSI字符集)2字节字符型(character)常用字符型:21布尔型(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布尔型(Boolean)Boolean(1字节)22枚举(enumerated)type类型名=(标识符1,标识符2,…标识符n);如:typeTMyColor=(mcRed,mcBlue,mcGreen,mcYellow,mcOrange);Answer=(ansYes,ansNo,ansMaybe);其对应的序号为0,1,2…枚举(enumerated)type类型名=(标识符1,标23子界(subrange)typeSomeNumbers=-128..127;Caps='A'..'Z';typeTColors=(Red,Blue,Green,Yellow,Orange,Purple,White,Black);TMyColors=Green..White;子界(subrange)type24实型(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字节 实型(real)常用实型25字符串类型(string)常用字符串String {$H+}AnsiString,{$H-}ShortString 'BORLAND'{BORLAND}'You''llsee'{You'llsee}''{无字符}'Line1'#13#10'Line2''中华人民共和国'基本字符串ShortString 255个字符AnsiString ~231个字符WideString ~230个字符字符串类型(string)常用字符串26数组(array)type类型名=array[有序类型]of基类型;如:typeMyArray=array[1..100]ofChar;type
TMatrix=array[1..10,1..50]ofReal;数组(array)type类型名=array[有序类型]27记录(record)type类型名=record域名:类型;...域名:类型;end;如:typeTDateRec=recordYear:Integer;Month:(Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec);Day:1..31;end;记录(record)type28集合(set)Type类型名=setof有序类型;如:typeTIntSet=setof1..250;setofByte;setof(Club,Diamond,Heart,Spade);setofChar;集合值表示:[1,3,5,7,9],['a','b','c']集合(set)Type类型名=setof有序类型;29文件(file)typePhoneEntry=recordFirstName,LastName:string[20];PhoneNumber:string[15];Listed:Boolean;end;PhoneList=fileofPhoneEntry;文件(file)type30类(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;//类不能定义在函数或过程中类(class)type31类引用类型(classreference)Type类引用类型名=classof类类型;如:typeTClass=classofTObject;Varanyobj:Tclass;Anyobj变量可以引用任何其他类。类引用类型在用户要调用一个类的方法,但编译时又不知道该类的类型时非常有用。类引用类型(classreference)Type类引用32接口(interface)type接口名=interface(父接口)各类中共同的方式或属性列表end;它体现的是多个互不相关的类之间的相同行为。接口(interface)type接口名=interf33变体类型(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)}变体类型(variant)变体类型与其他数据类型结合使用会产34指针类型(pointer)type指针类型名=^类型对字符串类型和类类型,其内部实现方式均用指针。但为方便使用,Delphi把许多运用指针的地方隐藏起来,用户在编制程序时可以不把其当作指针来处理,而让Delphi来处理容易出错的问题。指针类型(pointer)type指针类型名=^类型35过程类型typeTIntegerFunction=function:Integer;TProcedure=procedure;TStrProc=procedure(constS:string);TMathFunc=function(X:Double):Double;过程类型type36变量和常量变量常量真常量类型常量变量和常量变量37变量var变量名1,变量名2…,变量名n:类型;如:(全局变量在说明时还可以给初值)varX,Y,Z:Double;I,J,K:Integer;Digit:0..9;Okay:Boolean;CrtMode:Byteabsolute$0040;s:string;//字符串变量访问rd:TDateRec;//记录变量访问变量var变量名1,变量名2…,变量名n:类型;38字符串变量访问(S:String)作为字符串来访问S:='abcde';作为单个字符来访问S[1],s[2],s[3]等访问单个字符,类似于数组中的每个元素。字符串变量访问(S:String)作为字符串来访问39记录变量访问(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;记录变量访问(rd:TDateRec)点域访问40真常量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.302585092994045684;Ln10R=1/Ln10;Numeric=['0'..'9'];Alpha=['A'..'Z','a'..'z'];AlphaNum=Alpha+Numeric;真常量const常量名=常量表达式;41类型常量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);类型常量const常量名:类型=值;(兼容老版本,要加编译42运算符和表达式算术运算(Arithmeticoperator)关系运算(Relationaloperator)布尔运算(Booleanoperator)位运算(bitwiseoperator)字符串运算(Stringoperator)集合运算(Setoperator)指针运算(Pointeroperator)类运算(Classoperator)取地址操作(@)运算符的优先级运算符和表达式算术运算(Arithmeticoperato43算术运算(Arithmeticoperator)算术运算符:+,–*,/,div(整除),mod(取余)运算量有整型、实型等,div和mod只能是整型,结果类型同运算量。例:5/2→2.55div2→25mod2→15mod–2→1-5mod2→-1-5mod-2→-1算术运算(Arithmeticoperator)算术运算符44关系运算(Relationaloperator)关系运算符有=,<>,<,>,<=,>=运算量有简单类型、字符串类型等,结果为布尔类型。例:60>=30→true2.54<-43.2→false'abcde'<'aBcde'→flaseTrue>false→true关系运算(Relationaloperator)关系运算符45布尔运算(Booleanoperator)布尔运算符有not,and,or,xor运算量和结果均只能为布尔类型。例:Trueandfalse→falseFlaseor(60>=30)→true布尔运算(Booleanoperator)布尔运算符有n46位运算(bitwiseoperator)位运算符有not,and,or,xor,shl,shr 运算量和结果均只能为整型。例:Byte(Not$ff)→$00Byte($10and$11)→$10Byte($10or$1b)→$1bByte($20xor$21)→$01Byte($10shl2)→$40Byte($20shr1)→$10位运算(bitwiseoperator)位运算符有not47字符串运算(Stringoperator)字符串运算符主要指连接两个字符串的运算符+例:‘Iama'+'student.'→‘Iamastudent.'‘文件名:'+'abc.doc'→‘文件名:abc.doc'字符串运算(Stringoperator)字符串运算符主要48集合运算(Setoperator)集合运算符有+(并),-(差),*(交),<=(被包含),>=(包含),=(相等),<>(不等),in(成员检查)集合运算(Setoperator)集合运算符有+(并),49指针运算(Pointeroperator)指针运算符有+,-,=,<>,^指针运算(Pointeroperator)指针运算符有+50类运算(Classoperator)类运算符有as,isAs:将一个类实例转换为另一个类型的类。如:SenderasTButtonIs:用来判断一个类实例的类型,结果为布尔型。如:SenderisTComponet类运算(Classoperator)类运算符有as,i51取地址操作(@)@是单目运算符,其作用是返回变量的地址。取地址操作(@)@是单目运算符,其作用是返回变量的地址。52运算符的优先级@,not*,/,div,mod,and,shl,shr,as+,-or,xor=,<>,<,>,<=,>=,in,is高低运算符的优先级@,not53语句注释符单行注释符//;多行注释符{…}或(*…*)说明语句对数据类型、变量、常量、标号、函数及过程等进行声明的语句,编译后不生成可执行代码。语句以分号结束。赋值语句和复合语句选择语句循环语句With语句语句注释符54赋值语句和复合语句赋值语句(变量名:=表达式)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;赋值语句和复合语句赋值语句(变量名:=表达式)55选择语句If语句Case语句Goto语句选择语句If语句56If语句ifJ=0thenExit//此处不能用';'elseResult:=I/J;注:过程exit将终止子程序ifJ<>0thenbeginResult:=I/J;Count:=Count+1;End//此处不能用';'elseifCount=LastthenDone:=True//此处不能用';'elseExit;if布尔型表达式then语句1[else语句2]If语句ifJ=0thenifJ<>0the57Case语句case有序类型表达式of选择项1:语句1;...选择项n:语句n;[else语句;]End注:各选择项中的值要唯一。caseIof1..5:Caption:='Low';6..9:Caption:='High';0,10..99:Caption:='Outofrange';elseCaption:='';end;Case语句case有序类型表达式ofcaseIof58Goto语句labelStartHere//说明一个标号..StartHere:Beep;gotoStartHere;注:标号可以是标识符或0~9999的数。Goto语句labelStartHere//说明一个标59循环语句For语句while语句Repeat语句循环语句For语句60For语句for有序类型变量:=初值to终值do语句或for:=初值downto终值do语句注:有序类型变量的值增(to)减(downto)1,越过终值结束循环。max:=data[1];forI:=2to12doifData[I]>MaxthenMax:=Data[I];For语句for有序类型变量:=初值to终值do语61while语句while布尔表达式do语句注:布尔表达式为false结束循环。max:=data[1];I:=2;WhileI<=12doBeginifData[I]>MaxthenMax:=Data[I];I:=I+1;End;while语句while布尔表达式do语句62Repeat语句repeat语句1;...;语句2;until布尔表达式;注:布尔表达式为true结束循环。max:=data[1];I:=2;RepeatifData[I]>MaxthenMax:=Data[I];I:=I+1;UntilI>12;Repeat语句repeatmax:=data[1];63With语句访问记录中的数据域或类中的成员(域,属性或方法)。①withobjdo语句注:指类或记录类型变量的名字,下同。②withobj1,...,objndo语句或withobj1dowithobj2do...withobjndo语句注:obj1,...,objn等分别作用于与其对应的各自成员,可嵌套。举例With语句访问记录中的数据域或类中的成员(域,属性或方法)64With语句举例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';With语句举例withedit1do65过程和函数过程函数常用过程或函数过程和函数过程66过程procedure过程名(形参列表);——过程头[类型声明][常量声明][变量声明][过程声明][函数声明]begin语句;end;注:作为语句来调用。举例说明部分语句部分过程体过程procedure过程名(形参列表);——过程头举例67过程举例//把整型数转化为字符串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)过程举例//把整型数转化为字符串68函数function函数名(形参列表):类型;——函数头[类型声明][常量声明][变量声明][过程声明][函数声明]begin语句;end;注:可作为语句或值来调用。说明部分语句部分函数体举例函数function函数名(形参列表):类型;——函数头69函数举例//求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)函数举例//求x的y次方70常用过程或函数(sysutils或system单元)Abs求绝对值Sqr求平方值Sqrt求平方根Sin求正弦Cos求余弦Exp求e的幂Ln求自然对数Pi3.1415926535897932385Date取日期Time取时间Length求字符串的长度Pos求子串的位置Delete删除子串Copy复制字符串ChrASCII值对应的字符Ord取得序号Round实型四舍五入为整型Trunc实型取整Inttohex整型变为十六进制数串Inttostr整型变为字符串Strtoint字符串变为整型Datetostr日期变为字符串Upcase转化为大写字母Uppercase转化为大写字符串Lowercase转化为小写字符串Random产生一个随机数Odd判定奇数常用过程或函数(sysutils或system单元)Abs71程序和单元举例program程序名;——程序头[uses子句]——引用单元[类型声明][常量声明][变量声明][过程声明][函数声明]begin语句;End.——程序结束说明部分语句部分程序体程序和单元举例program程序名;——程序头说明部分语72程序举例programEditor;//程序对应的文件名(.dpr)必须与程序名相同。UsesForms,REAboutin'REABOUT.PAS'{AboutBox},REMainin'REMain.pas'{MainForm};{$R*.RES}//编译指示beginApplication.Title:='TextEditor';Application.CreateForm(TMainForm,MainForm);Application.Run;end.程序举例programEditor;//程序对应的文件名73单元unit单元名;——单元头Interface[uses子句]——引用其它单元接口部分implementation[uses子句]——引用其它单元实现部分[initialization初始化代码][finalization结束代码]end.——单元结束举例单元unit单元名;——单元头举例74单元举例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.单元举例unitUnit1;//单元对应的文件名(.p75本节要点(1.2)会使用Delphi的帮助系统(ObjectPascalReference主题)查阅ObjectPascal的各语法要素逐渐熟悉ObjectPascal的常用数据类型、变量、常量、运算符和表达式,并掌握它们的用法。熟悉各语句的格式和用法,并使用本讲稿中的各示例编写完整程序,来验证各语句的用法。逐渐掌握过程和函数的编写和调用。熟悉程序和单元的结构。本节要点(1.2)会使用Delphi的帮助系统(Object76练习(1.2)理论教程P28-30选择题1-5,简答题2-3上机实训教程1.3,1.4补充:使用Delphi编写一实现排序功能的程序。演示练习(1.2)理论演示771.3Delphi中的程序调试及异常处理程序调试异常处理★本节要点练习1.3Delphi中的程序调试及异常处理程序调试78程序调试程序设计中的错误类型设置编译选项控制程序的执行使用监视列表窗口(WatchList,Ctrl+F5)使用求值/修改对话框(Evaluate/modify,Ctrl+F7)程序调试程序设计中的错误类型79程序设计中的错误类型设计期错误编译期错误运行期错误逻辑错误程序设计中的错误类型设计期错误80设计期错误这一类型的错误较容易发现和纠正,因为DelPhi能对特定的值进行合法性检查,发现这类错误,DelPhi将显示一个警告窗口,以提示用户纠正错误。这种错误类型发生在使用DelPhi进行可视化设计的时候,通常是因为给组件的某个属性输入了非法的值。例如按钮组件TBitBtn的NumGlyphs属性取值为1..4,若输入的值不在此范围,则发生错误。设计期错误这一类型的错误较容易发现和纠正,因为81编译期错误编译期错误也称为语法错误。在DelPhi中,通常是当程序代码违反了objectPascal语言的语法规则时发生这类错误。比较常见的语法错误有标识符未定义或拼写错误;语句的末尾漏掉分号;赋值语句中漏写昌号;begin与end末配对;括号末配对;引号末配对等。如果程序代码中有语法错误,编译不能通过,代码编辑器的状态行将给出错误信息提示,并加亮有语法错误的代码行。编译期错误编译期错误也称为语法错误。在DelP82运行期错误程序虽然通过了编译,但运行失败,这种错误称为运行期错误,例如应用程序试图打开一个不存在的文件,或者运算时出现被零除等情况。DelPhi能够检测出这类错误,并退出当前模块。此时,如果不能确定错误发生在什么地方,可以用DelPhi内部集成的调试器查找错误的位置。例如可以用单步执行命令,让程序一条语句一条语句地执行,或者添加一个监视窗口,观察某个变量的变化情况。运行期错误程序虽然通过了编译,但运行失败,这83逻辑错误举例逻辑错误是指程序通过了编译,也能执行,但执行的结果跟预期的不同。逻辑错误有时比较难找,因为Delphi不能自动识别这类错误。这时就需要用到内部集成的调试器,通过控制程序的运行、监视程序的输出或观察变量的值,把错误逐步定位在一个较小的范围内。逻辑错误举例逻辑错误是指程序通过了编译,也能84举例(逻辑错误)编程实现符号函数的功能:varx,y:real;beginx:=-2;y:=0;ifx>=0thenifx>0theny:=1elsey:=-1;showmessage(floattostr(y));end;举例(逻辑错误)编程实现符号函数的功能:85设置编译选项设置编译选项用来控制Delphi程序的编译方式。可以使用如下二种方法进行设置:(1)使用Delphi菜单Project/Options--Compiler(2)在程序中加{$Z+}或{$Z-}设置或清除编译选项,其中Z为编译开关字母。建议,在程序调试时,将所有检查性的选项设置上,优化特性清除,以利于调试;当程序调试通过后,应把那些加重程序时间、空间负担的编译开关清除,设置优化代码功能,再编译一次,以生成简练的可执行文件。设置编译选项设置编译选项用来控制Delphi程86编译选项1代码生成(Codegeneration)编译选项1代码生成(Codegeneration)87编译选项2运行时的错误(Runtimeerrors)信息(Messages)编译选项2运行时的错误(Runtimeerrors)88编译选项3语法选项(Syntaxoptions)编译选项3语法选项(Syntaxoptions)89编译选项4调试(Debugging)举例编译选项4调试(Debugging)举例90举例(Rangechecking){$R+}或{$R-}vara:array[1..3]ofbyte;i:integer;beginfori:=1to4dobegina[i]:=i;showmessage(inttostr(a[i]));end;end;举例(Rangechecking){$R+}或{$R-}91控制程序的执行设置断点(ToggleBreakpoint/F5)执行到光标处(Runtocursor/F4)单步执行(TraceInto/F7,StepOver/F8)举例控制程序的执行设置断点(ToggleBreakpoint/92举例(控制程序的执行)编程实现符号函数的功能:varx,y:real;beginx:=-2;y:=0;ifx>=0thenifx>0theny:=1elsey:=-1;showmessage(floattostr(y));end;举例(控制程序的执行)编程实现符号函数的功能:93异常处理Delphi对异常的自动处理编程人员对异常的处理Try…except语句Raise语句Try…finally语句自定义异常类及其使用异常处理Delphi对异常的自动处理94Delphi对异常的自动处理Delphi为应用程序提供了一套缺省的自动异常处理机制,即当前模块发生错误后退出当前模块并给出错误信息,而并不立即引起应用程序的中止。若程序在Delphi的集成开发环境中运行,在给出相应错误信息的同时,还尽可能定位出错的位置。例如:vari:integer;r:real;begini:=0;r:=8/i;showmessage(floattostr(r));end;Delphi对异常的自动处理Delphi为应用程序提95Try…except语句(格式1)格式1:Try语句Except语句End;功能:若执行Try与Except之间的语句发生异常,则执行Except与End之间的语句对该异常作出处理,并清除异常,否则(没有异常)跳过Except与End之间的语句。举例Try…except语句(格式1)格式1:功能:举例96举例(格式1)举例:vari:integer;r:real;begini:=0;tryr:=8/i;showmessage(floattostr(r));exceptshowmessage('除数为零');end;end;举例(格式1)举例:97Try…except语句(格式2)格式2:Try语句Excepton[标识符:]异常类do语句on[标识符:]异常类do语句……………End;功能:当执行Try与Except之间的语句发生异常时,依次查找on后的异常类,直到发现某个匹配的异常类即执行其do后语句,并清除异常,然后跳过Try与Except结构,执行end后的语句。若在on后没有找到匹配的异常类,则异常仍然存在。举例Try…except语句(格式2)格式2:功能:举例98举例(格式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;举例(格式2)var99Try…except语句(格式3)格式3:Try语句Excepton[标识符:]异常类do语句on[标识符:]异常类do语句……………else语句End;功能:当执行Try与Except之间的语句发生异常时,依次查找on后的异常类,直到发现某个匹配的异常类即执行其do后语句,若在on后没有找到匹配的异常类,则执行else后的语句,并清除异常。举例Try…except语句(格式3)格式3:功能:举例100举例(格式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));//raiseexceptionexceptonE:EConvertErrordoshowmessage('异常,非数值'+#13+E.Message);elseshowmessage('异常,除数为0');end;end;举例(格式3)var101Raise语句在Except后语句处理了异常,则清除异常,但可在其后使用Raise重新产生该异常,再提供给外层Try来处理。vari:integer;r:real;begini:=0;tryr:=8/i;showmessage(floattostr(r));exceptshowmessage('除数为零');raise;end;Raise语句在Except后语句处理了异常,则清除异常,但102Try…finally语句格式:Try语句Finally语句End;功能:不管执行Try与Finally之间的语句是否发生异常,均可保证执行Finally后的语句,它不清除异常。通常用于在使用某资源时失败后以保证能释放该资源。举例Try…finally语句格式:功能:举例103举例(Try…finally语句)varf:textfile;//定义文本类型的文件变量beginassignfile(f,'c:\msdos.sys');//文件变量f指向c:\msdos.sys文件Reset(F);//文本文件以只读方式打开trywrite(f,'Onestring');//写入一个字符串,由于不能写,发生异常finallyCloseFile(F);showmessage('文件已关闭');end;end;举例(Try…finally语句)var104Delphi中的异常类Delphi提供的所有异常类都是类Exception的子类。常用异常类EDivByZerO:整数被零除。EIntOverflow:整数超出其能表示的范围。EZeroDivide:浮点数被零除Eoverflow:实数上溢出。Eunderflow:实数下溢出。ERangeError:访问数组时范围超出。Delphi中的异常类Delphi提供的所有异常类都是类Ex105常用异常类EConvertError:在字符串与其他数据类型进行转化,或类调用Assign方法时产生错误。EInvalidCase:类之间的强行类型转换(使用as关键字)时产生错误。EAbstractError:试图调用一个空方法(Abstract方法)。EInvalidPointer:错误的指针调用。EAccessViolation:试图非法访问内存。EOutofMemory:无可用内存分配。EStackOverflow:程序堆栈溢出。EDatabaseError:数据库操作出错。EDBEngineError:BDE(数据库引擎)出错。EInOutError:输入输出Eabort:哑异常,不产生任何错误信息,通常由Abort过程产生。常用异常类EConvertError:在字符串与其他数据类106Exception类主要属性Message:异常发生时,显示在异常对话框中的提示信息。HelpContext:指定帮助内容的ID号。主要方法Create(constMsg:string):创建带简单信息的异常类。CreateFmt(constMsg:string;constArgs:arrayofconst):创建带格式信息的异常类。Exception类主要属性107自定义异常类及其使用定义异常类typeMyError=class(Exception)end;在函数中创建自定义异常类functionStrToIntRange(constS:string;Min,Max:Longint):Longint;beginResult:=StrToInt(S);if(Result<Min)or(Result>Max)thenraiseMyError.CreateFmt('%disnotwithinthevalidrangeof%d..%d',[Result,Min,Max]);end;自定义异常类及其使用定义异常类108使用自定义异常类procedureTForm1.Button5Click(Sender:TObject);begintryStrToIntRange('1234',1,100);exceptone:MyErrordoshowmessage('发生自定义异常'#13+E.Message);end;end;使用自定义异常类procedureTForm1.Butto109本节要点(1.3)熟悉程序设计中的错误类型。掌握常用编译选项的含义及其设置。掌握程序调试方法(设置断点、执行到光标处、单步执行及使用监视列表窗口等)。掌握异常处理技术(Try…except语句,Try…finally语句及常用异常类等的使用)本节要点(1.3)熟悉程序设计中的错误类型。110练习(1.3)理论教程P28-30选择题6-10,简答题4,6,11上机1.实训教程1.52.本节中的实例练习(1.3)理论111本章小结本章通过编写最简单程序来介绍了Delphi的集成开发环境;简要全面地讲述了
Delphi编程语言——ObjectPascal;最后介绍Delphi中的程序调试及异常处理机制。这些都是Delphi编程基础,特别是ObjectPascal语言,一定要多编写程序,以达到快速熟悉其语法的目的;并且在后续编程中要自觉运用Delphi程序调试技术及异常处理方法。本章小结本章通过编写最简单程序来介绍了Delph112第1章Delphi的编程语言——ObjectPascal1.1认识Delphi1.2ObjectPascal语言基础1.3Delphi中的程序调试及异常处理本章小结第1章Delphi的编程语言——ObjectPascal1131.1认识Delphi
感受Delphi编程Delphi的特点Delphi编程环境及其作用Delphi应用程序的文件组成Delphi中几个重要概念Delphi学习方法★本节要点练习1.1认识Delphi感受Delphi编程114感受Delphi编程下面在Delphi的集成开发环境中编写一个最简单程序,并运行。让大家对Delphi的编程有一种感性认识,并体验Delphi快捷、方便、高效的编程环境。演示感受Delphi编程下面在Delphi的集成开发环境中编写一115Delphi的编程语言ObjectPascal课件116Delphi的编程语言ObjectPascal课件117面向对象的程序设计对象:把要处理的数据和处理这些数据的方法组合成的一种数据类型。对象有如下三大特性:封装性:把数据和处理数据的方法定义在同一数据类型(对象)中,一般只能用该对象中的方法来处理这些数据。继承性:可以用已定义的对象来构造其子对象,并且子对象可以访问其父对象中的数据和方法。
多态性:为动作赋予一个可由对象序列共享的名称,对象序列中的每个对象均以适合于自身的方式实现该操作。事件驱动面向对象的程序设计对象:把要处理的数据和处理这些数据的方法组118对象的多态性实例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;对象的多态性实例implementation119对象的多态性实例(续)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;对象的多态性实例(续)120Delphi编程环境及其作用菜单栏与工具栏组件(Component)栏对象树状列表(ObjectTreeView)对象监视器(ObjectInspector)窗体设计器(FormDesigner)代码编辑器(CodeEditor)项目管理器(ProjectManager)Delphi编程环境及其作用菜单栏与工具栏121Delphi应用程序的文件组成Delphi应用程序的文件主要有:工程文件(.DPR);单元文件(.PAS);窗体文件(.DFM)等。Delphi应用程序的文件组成Delphi应用程序的文件主要122Delphi中几个重要概念类(Class):Delphi中的对象类型数据,它由类的成员构成。对象:类数据类型的实例。组件:组成应用程序的构件,其类型一般为类类型。我们常用的是组件的属性、方法及事件。组件的事件:能够把发生于某一组件上的操作同一指定的方法进行关联。当该操作发生时会自动执行指定的方法。窗体或窗体上的组件接收事件,事件可由用户引发(例如键盘或鼠标操作),可由系统引发(例如定时器事件),也可由代码间接引发(例如当代码装载其他窗体时产生的Load事件)Delphi中几个重要概念类(Class):Delphi中的123类的成员域(字段):类中的数据。方法:类中的过程或函数。属性:类似于类中的域,但它本身并不占存储空间,对它进行存取操作,可以是直接存取,也可以是调用相应的方法,它可以是只读,只写或读写。类的成员域(字段):类中的数据。124Delphi学习方法转变编程思维方式重视上机应用为主多参考他人的编程经验和技巧(Delphi参考书,Delphi网站)Delphi学习方法转变编程思维方式125Delphi网站Delphi专家:Delphi园地:Delphi程序员之家:5.Delphi学习方法Delphi网站Delphi专家:wpghydelphi.126本节要点(1.1)熟悉Delphi集成开发环境主要组成部分及其作用:菜单栏与工具栏,组件栏,对象树状列表,对象监视器,窗体设计器,代码编辑器,项目管理器等。掌握Delphi应用程序的文件组成:项目文件(.DPR);单元文件(.PAS);窗体文件(.DFM)等。了解几个重要概念:类,对象,组件,组件的属性、方法及事件等。本节要点(1.1)熟悉Delphi集成开发环境主要组成部分127练习(1.1)理论1.Delphi集成开发环境主要有哪几个部分组成,并说明各部分的作用。2.一个Delphi应用程序主要由哪些文件组成?3.预习ObjectPascal上机实训教程1.1,1.2练习(1.1)理论1281.2Objectpascal语言基础
标识符数据类型变量和常量运算符和表达式语句过程和函数程序和单元★本节要点练习1.2Objectpascal语言基础标识符129标识符标识符必须由字母(A—Z、a—z)、数字(0—9)或下划线组成,不区分字母的大小写。标识符的第一个字符必须是字母或下划线。标识符的长度不应超过255个字符,如果超过255字符就只有前255个有效。不能将保留字用作标识符,如IF、AND、DO等。尽量不要重新定义已预定义的标识符,如一些标准的数学函数Sqrt、Sin等。标识符标识符必须由字母(A—Z、a—z)、数字(0—9)或下130数据类型
有序类型(ordinal)
实型(real)*整型(integer)*字符型(character)*布尔型(Boolean)*枚举(enumerated)子界(subrange)数组(array)*记录(record)*集合(set)文件(file)类(class)*类引用(classreference)接口(interface)简单类型(simple)字符串类型(string)*构造类型(structured)变体类型(variant)*指针类型(pointer)*过程类型(procedural)数据类型有序类型(ordinal)整型(intege131整型(integer)常用整型:Integer -2147483648~2147483647 有符号4字节Cardinal 0~4294967295
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 关于学生岗位试题及答案
- 机工实训检查试题及答案
- 农产品加工产业链整合方案
- 堤防项目环境影响评估方案
- (2025年)土木工程概预算试题及答案
- 企业年度质量保证与质量控制总结
- 成都市新津县2025年试验检测师之道路工程考试题库附参考答案
- 场地自行车训练试题及答案
- 2025年煤矿防治水试题及答案
- 绿化水源管理与节水灌溉方案
- 梁启超家书课件
- 防雷接地检测技术规范
- 商品房售楼处钢结构建筑施工方案
- 《脊髓性肌萎缩症“筛查-诊断-治疗”一体化中心建设标准》(征求意见稿)
- 产褥期化脓性乳腺炎的护理查房
- 口腔诊所简介
- 外部数据管理办法
- 华为集团干部管理办法
- 职业心理健康教育课件
- (浙江)现场流行病学调查职业技能竞赛备考试题库(含答案)
- 头疗课件培训
评论
0/150
提交评论