第1章 Delphi的编程语言——Object Pascal 本章小结
2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 1.1 认识Delphi 感受Delphi编程 Delphi的特点 Delphi编程环境及其作用 Delphi应用程序的文件组成 Delphi中几个重要概念 Delphi学习方法 ★本节要点 练习 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87
2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 感受Delphi编程 下面在Delphi的集成开发环境中编写一个最简单程序,并运行。让 大家对Delphi的编程有一种感性认识,并体验Delphi快捷、方便、 高效的编程环境。 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 演示
2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 Delphi的特点 Delphi最早是Borland公司于1994年底发布的一种可视化编程语言。 它以Object Pascal作为基本开发语言。目前已从Delphi 1.0发展 到Delphi 7.0。它适用于Windows 9x, Windows xp,Windows 2000或更高的版本操作系统,同时也推出Lynux操作系统下的kylix 版本。 编程效率高、代码质量好 领先的数据库技术 强大的Internet应用开发功能 与Office 的巧妙结合 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87
2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 可视化编程语言 编程语言的发展 机器语言→汇编语言→高级语言(结构化→面向对象→可视化) 面向对象的程序设计(Object Oriented Programming) 可视化(Visual)编程语言 Delphi,VFP,VB,VC 等,由组件来构造应用程序。 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87
面向对象的程序设计 对象:把要处理的数据和处理这些数据的方法组合成的一种数据 类型。对象有如下三大特性: 对象:把要处理的数据和处理这些数据的方法组合成的一种数据 类型。对象有如下三大特性: 封装性:把数据和处理数据的方法定义在同一数据类型(对象)中,一般只能用该对象中的方法来处理这些数据。 继承性:可以用已定义的对象来构造其子对象,并且子对象可以访问其父对象中的数据和方法。 多态性:为动作赋予一个可由对象序列共享的名称,对象序列中的每个对象均以适合于自身的方式实现该操作。 事件驱动
对象的多态性实例 implementation {$R *.DFM} type TPerson=class Name:string; weight:integer; constructor Create(aName:string;aWeight:integer); function GetTitle:string; virtual; //父类中使用虚方法 function GetInformation:string; end; TStudent=class(TPerson) School:string; Constructor Create(aname:string;aWeight:integer;aSchool:string); function GetTitle:string; override;//子类中使用覆盖 constructor TPerson.Create(aName:string;aWeight:integer); begin inherited create; name:=aname; weight:=aweight; function TPerson.GetTitle:string; result:=Name+' is a Person';
对象的多态性实例(续) Constructor TStudent.Create(aname:string;aWeight:integer;aSchool:string); begin inherited create(aname,aweight); school:=aschool; end; function TStudent.GetTitle:string; result:=Name+' is a Student of '+school; procedure showtitle(Person:TPerson); showmessage(person.getInformation); procedure TForm1.Button1Click(Sender: TObject); var aPerson:TPerson; aStudent:TStudent; aPerson:=TPerson.create('David',60); AStudent:=TStudent.create('Young',65,'Tsinghua'); showtitle(aperson); //显示某人相关的信息 showtitle(aStudent); //显示某学生相关的信息 aperson.free; astudent.free;
Delphi编程环境及其作用 菜单栏与工具栏 组件(Component)栏 对象树状列表(Object TreeView) 对象监视器(Object Inspector) 窗体设计器(Form Designer) 代码编辑器(Code Editor) 项目管理器(Project Manager)
2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 Delphi应用程序的文件组成 Delphi应用程序的文件主要有: 工程文件(.DPR);单元文件(.PAS);窗体文件(.DFM)等。 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87
2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 Delphi中几个重要概念 类(Class):Delphi中的对象类型数据,它由类的成员构成。 对象:类数据类型的实例。 组件:组成应用程序的构件,其类型一般为类类型。我们常用的是 组件的属性、方法及事件。 组件的事件:能够把发生于某一组件上的操作同一指定的方法进 行关联。当该操作发生时会自动执行指定的方法。 窗体或窗体上的组件接收事件,事件可由用户引发(例如键盘或鼠 标操作),可由系统引发(例如定时器事件),也可由代码间接 引发(例如当代码装载其他窗体时产生的Load事件) 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87
2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 类的成员 域(字段):类中的数据。 方法:类中的过程或函数。 属性:类似于类中的域,但它本身并不占存储空间,对它进行存取操作,可以是直接存取,也可以是调用相应的方法,它可以是只读,只写或读写。 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87
2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 Delphi学习方法 转变编程思维方式 重视上机 应用为主 多参考他人的编程经验和技巧(Delphi参考书, Delphi网站) 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87
2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 Delphi网站 Delphi 专家:wpghydelphi.y365.com Delphi 园地:www.delphifans.com Delphi程序员之家:www.delphiboy.com 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 5.Delphi学习方法
2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 本节要点 (1.1) 熟悉Delphi集成开发环境主要组成部分及其作用:菜单栏与工具栏, 组件栏,对象树状列表,对象监视器,窗体设计器,代码编辑器, 项目管理器等。 掌握Delphi应用程序的文件组成:项目文件(.DPR);单元文件 (.PAS);窗体文件(.DFM)等。 了解几个重要概念:类,对象,组件,组件的属性、方法及事件等。 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87
2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 练习(1.1) 理论 1. Delphi集成开发环境主要有哪几个部分组成,并说明各部分的作 用。 2.一个Delphi应用程序主要由哪些文件组成? 3.预习Object Pascal 上机 实训教程1.1,1.2 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87
2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 1.2 Object pascal语言基础 标识符 数据类型 变量和常量 运算符和表达式 语句 过程和函数 程序和单元 ★本节要点 练习 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87
标识符 标识符必须由字母(A—Z、a—z)、数字(0—9)或下划线组成,不区分字母的大小写。 标识符的第一个字符必须是字母或下划线。 标识符的长度不应超过255个字符,如果超过255字符就只有前255个有效。 不能将保留字用作标识符,如IF、AND、DO等。 尽量不要重新定义已预定义的标识符,如一些标准的数学函数Sqrt、Sin等。
2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 数据类型 整型(integer)* 字符型(character)* 布尔型(Boolean)* 枚举(enumerated) 子界(subrange) 有序类型(ordinal) 实型(real)* 简单类型(simple) 字符串类型(string)* 构造类型(structured) 变体类型(variant)* 指针类型(pointer)* 过程类型(procedural) 数组(array)* 记录(record)* 集合(set) 文件(file) 类(class)* 类引用(class reference) 接口(interface) 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87
整型(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 ' '空格 基本字符型: AnsiChar ANSI字符集 1字节 WideChar Unicode字符集(前256个是ANSI字符集) 2字节
布尔型(Boolean) Boolean(1字节) False < True Ord(False) = 0 Ord(True) = 1 Pred(True) = False Succ(False) = True ByteBool (1字节), WordBool (2字节), LongBool (4字节) False <> True Ord(False) = 0 Ord(True) <> 0 Pred(False) = True Succ(False) = True
枚举(enumerated) type 类型名=(标识符1,标识符2, …标识符n); 如: type TMyColor = (mcRed, mcBlue, mcGreen, mcYellow, mcOrange); Answer = (ansYes, ansNo, ansMaybe); 其对应的序号为0,1,2…
子界(subrange) type SomeNumbers = -128..127; Caps = 'A'..'Z'; type TColors = (Red, Blue, Green, Yellow, Orange, Purple, White, Black); TMyColors = Green..White;
实型(real) 常用实型 Real ±5.0 × 10-324 ~ 1.7 × 10308 8字节 基本实型 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.5807 8字节
字符串类型(string) 常用字符串 String {$H+} AnsiString , {$H-} ShortString 'BORLAND' { BORLAND } 'You''ll see' { You'll see } '' {无字符} 'Line 1'#13#10'Line 2' '中华人民共和国' 基本字符串 ShortString 255 个字符 AnsiString ~231 个字符 WideString ~230个字符
数组(array) type 类型名=array[有序类型] of 基类型; 如: type MyArray= array[1..100] of Char; type TMatrix = array[1..10, 1..50] of Real;
记录(record) type 类型名 = record 域名:类型; ... end; 如: TDateRec = record Year: Integer; Month: (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec); Day: 1..31;
集合(set) Type 类型名= set of 有序类型; 如: type TIntSet = set of 1..250; set of Byte; set of (Club, Diamond, Heart, Spade); set of Char; 集合值表示:[1, 3, 5, 7, 9] ,['a','b','c']
文件(file) type PhoneEntry = record FirstName, LastName: string[20]; PhoneNumber: string[15]; Listed: Boolean; end; PhoneList = file of PhoneEntry;
类(class) type TListColumns = class(TCollection) private FOwner: TCustomListView; function GetItem(Index: Integer): TListColumn; procedure SetItem(Index: Integer; Value: TListColumn); protected function GetOwner: TPersistent; override; procedure Update(Item: TCollectionItem); override; public constructor Create(AOwner: TCustomListView); function Add: TListColumn; property Owner: TCustomListView read FOwner; property Items[Index: Integer]: TListColumn read GetItem write SetItem; default; end; //类不能定义在函数或过程中
类引用类型(class reference) Type 类引用类型名=class of 类类型; 如: type TClass = class of TObject; Var anyobj:Tclass; Anyobj变量可以引用任何其他类。 类引用类型在用户要调用一个类的方法,但编译时又不知道该类的类型时非常有用。
接口(interface) type 接口名 = interface (父接口) 各类中共同的方式或属性列表 end; 它体现的是多个互不相关的类之间的相同行为。
变体类型(variant) 变体类型与其他数据类型结合使用会产生类型的自动转换。 var V1, V2, V3, V4, V5: Variant; I: Integer; D: Double; S: string; begin V1 := 1; { integer value } V2 := 1234.5678; { real value } V3 := 'Hello world!'; { string value } I := V1; { I = 1 (integer value) } D := V2; { D = 1234.5678 (real value) } S := V3; { S = 'Hello world!' (string value) }
指针类型(pointer) type 指针类型名= ^类型 对字符串类型和类类型,其内部实现方式均用指针。但为方便使用,Delphi把许多运用指针的地方隐藏起来,用户在编制程序时可以不把其当作指针来处理,而让Delphi来处理容易出错的问题。
过程类型 type TIntegerFunction = function: Integer; TProcedure = procedure; TStrProc = procedure(const S: string); TMathFunc = function(X: Double): Double;
2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 变量和常量 变量 常量 真常量 类型常量 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87
2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 变量 var 变量名1,变量名2…,变量名n:类型; 如:(全局变量在说明时还可以给初值) var X, Y, Z: Double; I, J, K: Integer; Digit: 0..9; Okay: Boolean; CrtMode: Byte absolute $0040; s:string; //字符串变量访问 rd: TDateRec; //记录变量访问 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87
2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 字符串变量访问(S:String) 作为字符串来访问 S:='abcde'; 作为单个字符来访问 S[1],s[2],s[3]等访问单个字符,类似于数组中的每个元素。 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87
2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 记录变量访问(rd:TDateRec) 点域访问 Rd.year:=2001; rd.month:=feb; rd.day:=12; With …do访问 With rd do year:=2001; type TDateRec = record Year: Integer; Month: (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec); Day: 1..31; end; 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87
2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 真常量 const 常量名=常量表达式; const Min = 10; Max = $100; Center = (Max - Min) div 2; Beta = Chr(225); NumChars = Ord('Z') - Ord('A') + 1; Message = 'Out of memory'; ErrStr = ' Error: ' + Message + '. '; ErrPos = 80 - Length(ErrStr) div 2; Ln10 = 2.302585092994045684; Ln10R = 1 / Ln10; Numeric = ['0'..'9']; Alpha = ['A'..'Z', 'a'..'z']; AlphaNum = Alpha + Numeric; 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87
2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 类型常量 const 常量名:类型=值;(兼容老版本,要加编译开关{$j+};现在可以 直接在全局变量中赋初值) Const i:integer=23; Digits1: array[0..4] of Char=('0','1','2',3',4'); Digits2: array[0..4] of Char = '01234'; type TCube=array[0..1, 0..1, 0..1] of Integer; TMonth=(Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec); TDate = record D: 1..31; M: TMonth; Y: 1900..1999; end; const Maze:TCube =(((0, 1),(2, 3)),((4, 5),(6,7))); SomeDay: TDate = (D: 2; M: Dec; Y: 1960); 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87
2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 运算符和表达式 算术运算(Arithmetic operator) 关系运算(Relational operator) 布尔运算(Boolean operator) 位运算(bitwise operator) 字符串运算(String operator) 集合运算(Set operator) 指针运算(Pointer operator) 类运算(Class operator) 取地址操作(@) 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 运算符的优先级
算术运算(Arithmetic operator) 算术运算符:+, – *, /, div(整除), mod(取余) 运算量有整型、实型等, div和mod只能是整型,结果类型同运算量。 例: 5/2 → 2.5 5 div2 → 2 5 mod 2 → 1 5 mod –2 → 1 -5 mod 2 → -1 -5 mod -2 → -1 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87
关系运算(Relational operator) 关系运算符有 =, <>, <, >, <=, >= 运算量有简单类型、字符串类型等,结果为布尔类型。 例: 60>=30 →true 2.54<-43.2 →false 'abcde'<'aBcde' →flase True>false →true 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87
布尔运算(Boolean operator) 布尔运算符有 not, and, or, xor 运算量和结果均只能为布尔类型。 例: True and false →false Flase or (60>=30) →true 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87
位运算(bitwise operator) 位运算符有 not, and, or, xor, shl, shr 运算量和结果均只能为整型。 例: Byte(Not $ff) → $00 Byte($10 and $11) → $10 Byte( $10 or $1b) → $1b Byte( $20 xor $21) → $01 Byte( $10 shl 2) → $40 Byte( $20 shr 1) → $10 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87
字符串运算(String operator) 字符串运算符主要指连接两个字符串的运算符 + 例: ‘I am a'+' student.' → ‘I am a student.' ‘文件名:'+'abc.doc' → ‘文件名:abc.doc' 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87
2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 集合运算(Set operator) 集合运算符有 +(并), - (差), * (交), <= (被包含), >= (包含), = (相等), <> (不等), in (成员检查) 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87
指针运算(Pointer operator) 指针运算符有 +, -, =, <>, ^ 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87
2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 类运算(Class operator) 类运算符有 as, is As:将一个类实例转换为另一个类型的类。 如:Sender as TButton Is:用来判断一个类实例的类型,结果为布尔型。 如:Sender is TComponet 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87
2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 取地址操作(@) @是单目运算符,其作用是返回变量的地址。 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87
2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 运算符的优先级 @, not *, /, div, mod, and, shl, shr, as +, - or, xor =, <>, <, >, <=, >=, in, is 高 低 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87
2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 语句 注释符 单行注释符//;多行注释符{…}或(*…*) 说明语句 对数据类型、变量、常量、标号、函数及过程等进行声明的语句, 编译后不生成可执行代码。 语句以分号结束。 赋值语句和复合语句 选择语句 循环语句 With语句 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87
2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 赋值语句和复合语句 赋值语句(变量名:=表达式) X := Y + Z; Done := (I >= 1) and (I < 100); I := Sqr(J) - I * K; SomeArray[I + 1] := P^; TMyObject.SomeProperty := True; 复合语句(把多个语句组合成一个语句) begin Z := X; X := Y; Y := Z; end; 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87
2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 选择语句 If语句 Case语句 Goto语句 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87
2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 If语句 if 布尔型表达式 then 语句1 [else 语句2] if J = 0 then Exit //此处不能用';' else Result := I/J; 注:过程exit将终止子程序 if J <> 0 then begin Result := I/J; Count := Count + 1; End //此处不能用';' else if Count = Last then Done := True //此处不能用';' else Exit; 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87
2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 Case语句 case 有序类型表达式 of 选择项1: 语句1; ... 选择项n: 语句n; [else 语句;] End 注:各选择项中的值要唯一。 case I of 1..5: Caption := 'Low'; 6..9: Caption := 'High'; 0, 10..99: Caption := 'Out of range'; else Caption := ''; end; 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87
2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 Goto语句 label StartHere //说明一个标号 .. StartHere: Beep; goto StartHere; 注:标号可以是标识符或0~9999的数。 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87
2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 循环语句 For语句 while语句 Repeat语句 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87
2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 For语句 for 有序类型变量:=初值 to 终值 do 语句 或 for :=初值 downto 终值 do 语句 注:有序类型变量的值增(to)减(downto)1,越过终值结束循环。 max:=data[1]; for I := 2 to 12 do if Data[I] > Max then Max := Data[I]; 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87
2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 while语句 while 布尔表达式 do 语句 注:布尔表达式为false结束循环。 max:=data[1]; I:=2; While I<=12 do Begin if Data[I] > Max then Max := Data[I]; I:=I+1; End; 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87
2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 Repeat语句 repeat 语句1; ...; 语句2; until 布尔表达式; 注:布尔表达式为true结束循环。 max:=data[1]; I:=2; Repeat if Data[I] > Max then Max := Data[I]; I:=I+1; Until I>12; 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87
2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 With语句 访问记录中的数据域或类中的成员(域,属性或方法)。 ① with obj do 语句 注:指类或记录类型变量的名字,下同。 ② with obj1, ..., objn do 语句 或 with obj1 do with obj2 do ... with objn do 语句 注: obj1, ..., objn等分别作用于与其对应的各自成员,可嵌套。 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 举例
2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 With语句举例 with edit1 do begin text:='时间'; //相当于edit1.text:='时间'; enable:=false; //相当于edit1.enable:=false; end; with label1,edit1 do Caption:='label one'; //相当于label1.Caption:='label one'; Text:='text one'; // 相当于edit1.Text:='text one'; with form1,edit1 do Text:='text one'; // 相当于form1.edit1.Text:='text one'; 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87
2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 过程和函数 过程 函数 常用过程或函数 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87
2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 过程 procedure 过程名(形参列表); ——过程头 [类型声明] [常量声明] [变量声明] [过程声明] [函数声明] begin 语句; end; 注:作为语句来调用。 说明部分 过程体 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 语句部分 举例
2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 过程举例 //把整型数转化为字符串 procedure NumString(N: Integer; var S: string); var V: Integer; begin V := Abs(N); S := ''; repeat S := Chr(V mod 10 + Ord('0')) + S; V := V div 10; until V = 0; if N < 0 then S := '-' + S; end; //NUmString(234,x) 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87
2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 函数 function 函数名(形参列表):类型; ——函数头 [类型声明] [常量声明] [变量声明] [过程声明] [函数声明] begin 语句; end; 注:可作为语句或值来调用。 说明部分 函数体 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 语句部分 举例
2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 函数举例 //求x的y次方 function Power(X: Real; Y: Integer): Real; var I: Integer; begin Result := 1.0; //Result代表函数值 I := Y; while I > 0 do if Odd(I) then Result := Result * X; I := I div 2; X := Sqr(X); end; end; //p:=power(2.0,3) 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87
常用过程或函数(sysutils或system单元) Abs 求绝对值 Sqr 求平方值 Sqrt 求平方根 Sin 求正弦 Cos 求余弦 Exp 求e的幂 Ln 求自然对数 Pi 3.1415926535897932385 Date 取日期 Time 取时间 Length 求字符串的长度 Pos 求子串的位置 Delete 删除子串 Copy 复制字符串 Chr ASCII值对应的字符 Ord 取得序号 Round 实型四舍五入为整型 Trunc 实型取整 Inttohex 整型变为十六进制数串 Inttostr 整型变为字符串 Strtoint 字符串变为整型 Datetostr 日期变为字符串 Upcase 转化为大写字母 Uppercase 转化为大写字符串 Lowercase 转化为小写字符串 Random 产生一个随机数 Odd 判定奇数 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87
2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 程序和单元 program 程序名; ——程序头 [uses子句] ——引用单元 [类型声明] [常量声明] [变量声明] [过程声明] [函数声明] begin 语句; End. ——程序结束 说明部分 程序体 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 语句部分 举例
2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 程序举例 program Editor; //程序对应的文件名(.dpr)必须与程序名相同。 Uses Forms, REAbout in 'REABOUT.PAS' {AboutBox}, REMain in 'REMain.pas' {MainForm}; {$R *.RES} //编译指示 begin Application.Title := 'Text Editor'; Application.CreateForm(TMainForm, MainForm); Application.Run; end. 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87
2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 单元 unit 单元名; ——单元头 Interface [uses子句] ——引用其它单元 接口部分 implementation 实现部分 [initialization 初始化代码] [finalization 结束代码] end. ——单元结束 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 举例
2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 单元举例 unit Unit1; //单元对应的文件名(.pas)必须与单元名相同 interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); begin close; end. 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87
2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 本节要点(1.2) 会使用Delphi的帮助系统(Object Pascal Reference主题)查阅 Object Pascal的各语法要素 逐渐熟悉Object Pascal的常用数据类型、变量、常量、运算符和表 达式,并掌握它们的用法。 熟悉各语句的格式和用法,并使用本讲稿中的各示例编写完整程序, 来验证各语句的用法。 逐渐掌握过程和函数的编写和调用。 熟悉程序和单元的结构。 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87
2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 练习(1.2) 理论 教程P28-30选择题1-5,简答题2-3 上机 实训教程1.3,1.4 补充:使用Delphi编写一实现排序功能的程序。 本章使用的文件有: word 97 示例 word 97操作题 2-5,10,15,17,24,34,35,36,38,39,56-58,60,63-67,69-72,74,77,81-83,86,87 演示
制作本实例首先要建立一数据库表Student.db,并建立一指向该数据库的别名test。 1.3 Delphi 中的程序调试及异常处理 程序调试 异常处理 ★本节要点 练习 制作本实例首先要建立一数据库表Student.db,并建立一指向该数据库的别名test。
制作本实例首先要建立一数据库表Student.db,并建立一指向该数据库的别名test。 程序调试 程序设计中的错误类型 设置编译选项 控制程序的执行 使用监视列表窗口(Watch List, Ctrl+F5) 使用求值/修改对话框(Evaluate/modify, Ctrl+F7) 制作本实例首先要建立一数据库表Student.db,并建立一指向该数据库的别名test。
制作本实例首先要建立一数据库表Student.db,并建立一指向该数据库的别名test。 程序设计中的错误类型 设计期错误 编译期错误 运行期错误 逻辑错误 制作本实例首先要建立一数据库表Student.db,并建立一指向该数据库的别名test。
制作本实例首先要建立一数据库表Student.db,并建立一指向该数据库的别名test。 设计期错误 这种错误类型发生在使用DelPhi进行可视化设计的时候,通常是因为给组件的某个属性输入了非法的值。例如按钮组件TBitBtn的NumGlyphs属性取值为 1..4,若输入的值不在此范围,则发生错误。 这一类型的错误较容易发现和纠正,因为DelPhi能对特定的值进行合法性检查,发现这类错误,DelPhi将显示一个警告窗口,以提示用户纠正错误。 制作本实例首先要建立一数据库表Student.db,并建立一指向该数据库的别名test。
制作本实例首先要建立一数据库表Student.db,并建立一指向该数据库的别名test。 编译期错误 编译期错误也称为语法错误。在DelPhi中,通常是当程序代码违反了object Pascal语言的语法规则时发生这类错误。比较常见的语法错误有标识符未定义或拼写错误;语句的末尾漏掉分号;赋值语句中漏写昌号;begin与end末配对;括号末配对;引号末配对等。 如果程序代码中有语法错误,编译不能通过,代码编辑器的状态行将给出错误信息提示,并加亮有语法错误的代码行。 制作本实例首先要建立一数据库表Student.db,并建立一指向该数据库的别名test。
制作本实例首先要建立一数据库表Student.db,并建立一指向该数据库的别名test。 运行期错误 程序虽然通过了编译,但运行失败,这种错误称为运行期错误,例如应用程序试图打开一个不存在的文件,或者运算时出现被零除等情况。 DelPhi能够检测出这类错误,并退出当前模块。此时,如果不能确定错误发生在什么地方,可以用DelPhi内部集成的调试器查找错误的位置。例如可以用单步执行命令,让程序一条语句一条语句地执行,或者添加一个监视窗口,观察某个变量的变化情况。 制作本实例首先要建立一数据库表Student.db,并建立一指向该数据库的别名test。
制作本实例首先要建立一数据库表Student.db,并建立一指向该数据库的别名test。 逻辑错误 逻辑错误是指程序通过了编译,也能执行,但执行的结果跟预期的不同。 逻辑错误有时比较难找,因为Delphi不能自动识别这类错误。这时就需要用到内部集成的调试器,通过控制程序的运行、监视程序的输出或观察变量的值,把错误逐步定位在一个较小的范围内。 制作本实例首先要建立一数据库表Student.db,并建立一指向该数据库的别名test。 举例
举例(逻辑错误) 编程实现符号函数的功能 : var x,y:real; begin x:=-2; y:=0; if x>=0 then if x>0 then y:=1 else y:=-1; showmessage(floattostr(y)); end;
制作本实例首先要建立一数据库表Student.db,并建立一指向该数据库的别名test。 设置编译选项 设置编译选项用来控制Delphi程序的编译方式。 可以使用如下二种方法进行设置: (1)使用Delphi菜单Project/Options--Compiler (2)在程序中加{$Z+}或{$Z-}设置或清除编译选项,其中Z为编译开关字母。 建议,在程序调试时,将所有检查性的选项设置上,优化特性清除,以利于调试;当程序调试通过后,应把那些加重程序时间、空间负担的编译开关清除,设置优化代码功能,再编译一次,以生成简练的可执行文件。 制作本实例首先要建立一数据库表Student.db,并建立一指向该数据库的别名test。
制作本实例首先要建立一数据库表Student.db,并建立一指向该数据库的别名test。 编译选项1 代码生成(Code generation) 制作本实例首先要建立一数据库表Student.db,并建立一指向该数据库的别名test。
制作本实例首先要建立一数据库表Student.db,并建立一指向该数据库的别名test。 编译选项2 运行时的错误(Runtime errors) 信息(Messages) 制作本实例首先要建立一数据库表Student.db,并建立一指向该数据库的别名test。
制作本实例首先要建立一数据库表Student.db,并建立一指向该数据库的别名test。 编译选项3 语法选项(Syntax options) 制作本实例首先要建立一数据库表Student.db,并建立一指向该数据库的别名test。
制作本实例首先要建立一数据库表Student.db,并建立一指向该数据库的别名test。 编译选项4 调试(Debugging) 制作本实例首先要建立一数据库表Student.db,并建立一指向该数据库的别名test。 举例
举例(Range checking) {$R+}或{$R-} var a:array [1..3] of byte; i:integer; begin for i:=1 to 4 do a[i]:=i; showmessage(inttostr(a[i])); end;
控制程序的执行 设置断点(Toggle Breakpoint/F5) 执行到光标处(Run to cursor/F4) 单步执行(Trace Into/F7,Step Over/F8) 举例
举例(控制程序的执行) 编程实现符号函数的功能 : var x,y:real; begin x:=-2; y:=0; if x>=0 then if x>0 then y:=1 else y:=-1; showmessage(floattostr(y)); end;
制作本实例首先要建立一数据库表Student.db,并建立一指向该数据库的别名test。 异常处理 Delphi对异常的自动处理 编程人员对异常的处理 Try…except语句 Raise语句 Try…finally语句 自定义异常类及其使用 制作本实例首先要建立一数据库表Student.db,并建立一指向该数据库的别名test。
Delphi对异常的自动处理 Delphi为应用程序提供了一套缺省的自动异常处理机制,即当前模块发生错误后退出当前模块并给出错误信息,而并不立即引起应用程序的中止。 若程序在Delphi的集成开发环境中运行,在给出相应错误信息的同时,还尽可能定位出错的位置。 例如: var i:integer; r:real; begin i:=0; r:=8 / i; showmessage(floattostr(r)); end;
Try…except语句(格式1) 格式1: Try 语句 Except End; 功能: 若执行Try与Except之间的语句发生异常,则执行Except与End之间的语句对该异常作出处理,并清除异常,否则(没有异常)跳过Except与End之间的语句。 举例
举例(格式1) 举例: var i:integer; r:real; begin i:=0; try r:=8/i; showmessage(floattostr(r)); except showmessage('除数为零'); end;
Try…except语句(格式2) 格式2: Try 语句 Except on [标识符:] 异常类 do 语句 …………… End; 功能: 当执行Try与Except之间的语句发生异常时,依次查找on后的异常类,直到发现某个匹配的异常类即执行其do后语句,并清除异常,然后跳过Try与Except结构,执行end后的语句。 若在on后没有找到匹配的异常类,则异常仍然存在。 举例
举例(格式2) var i,j:integer; r:real; begin j:=20; try i:=strtoint(edit1.Text); j:=10 div i; r:=10/(i-1); showmessage('正常,j='+inttostr(j)+',r='+floattostr(r)); except on E:EConvertError do showmessage('异常,非数值'+#13+E.Message); on EDivByZero do showmessage('异常,整数被0除'); on EZeroDivide do showmessage('异常,实数被0除'); end;
Try…except语句(格式3) 格式3: Try 语句 Except on [标识符:] 异常类 do 语句 …………… else End; 功能: 当执行Try与Except之间的语句发生异常时,依次查找on后的异常类,直到发现某个匹配的异常类即执行其do后语句,若在on后没有找到匹配的异常类,则执行else后的语句,并清除异常。 举例
举例(格式3) var i,j:integer; r:real; begin j:=20; try i:=strtoint(edit1.Text); j:=10 div i; r:=10/(i-1); showmessage('正常,j='+inttostr(j)+',r='+floattostr(r)); //raise exception except on E:EConvertError do showmessage('异常,非数值'+#13+E.Message); else showmessage('异常,除数为0'); end;
Raise语句 在Except后语句处理了异常,则清除异常,但可在其后使用Raise重新产生该异常,再提供给外层Try来处理。 var i:integer; r:real; begin i:=0; try r:=8/i; showmessage(floattostr(r)); except showmessage('除数为零'); raise; end;
Try…finally语句 格式: Try 语句 Finally End; 功能: 不管执行Try与Finally之间的语句是否发生异常,均可保证执行Finally后的语句,它不清除异常。 通常用于在使用某资源时失败后以保证能释放该资源。 举例
举例(Try…finally语句) var f:textfile ;//定义文本类型的文件变量 begin assignfile(f,'c:\msdos.sys'); //文件变量f指向c:\msdos.sys文件 Reset(F);//文本文件以只读方式打开 try write(f,'One string');//写入一个字符串,由于不能写,发生异常 finally CloseFile(F); showmessage('文件已关闭'); end;
Delphi中的异常类 Delphi提供的所有异常类都是类Exception的子类。 常用异常类 EDivByZerO:整数被零除 。 EIntOverflow:整数超出其能表示的范围 。 EZeroDivide:浮点数被零除 Eoverflow:实数上溢出。 Eunderflow:实数下溢出。 ERangeError:访问数组时范围超出。
常用异常类 EConvertError:在字符串与其他数据类型进行转化,或类调用Assign方法时产生错误。 EInvalidCase:类之间的强行类型转换(使用as关键字)时产生错误。 EAbstractError:试图调用一个空方法(Abstract 方法)。 EInvalidPointer:错误的指针调用。 EAccessViolation:试图非法访问内存。 EOutofMemory:无可用内存分配。 EStackOverflow:程序堆栈溢出。 EDatabaseError:数据库操作出错。 EDBEngineError:BDE(数据库引擎)出错。 EInOutError:输入输出 Eabort:哑异常,不产生任何错误信息,通常由Abort过程产生 。
Exception类 主要属性 Message:异常发生时,显示在异常对话框中的提示信息。 HelpContext:指定帮助内容的ID号。 主要方法 Create (const Msg: string):创建带简单信息的异常类。 CreateFmt (const Msg: string; const Args: array of const): 创建带格式信息的异常类。
自定义异常类及其使用 定义异常类 type MyError=class(Exception) end; 在函数中创建自定义异常类 function StrToIntRange(const S: string; Min, Max: Longint): Longint; begin Result := StrToInt(S); if (Result < Min) or (Result > Max) then raise MyError.CreateFmt('%d is not within the valid range of %d..%d', [Result, Min, Max]);
使用自定义异常类 procedure TForm1.Button5Click(Sender: TObject); begin try StrToIntRange('1234',1,100); except on e:MyError do showmessage('发生自定义异常'#13+E.Message); end;
本节要点(1.3) 熟悉程序设计中的错误类型。 掌握常用编译选项的含义及其设置。 掌握程序调试方法(设置断点、执行到光标处、单步执行及使用监视列表窗口等)。 掌握异常处理技术( Try…except语句, Try…finally语句及常用异常类 等的使用)
练习(1.3) 理论 教程P28-30选择题6-10,简答题4,6,11 上机 1.实训教程1.5 2.本节中的实例
本章小结 本章通过编写最简单程序来介绍了Delphi的集成开发环境; 简要全面地讲述了 Delphi 编程语言——Object Pascal;最后介绍 Delphi 中的程序调试及异常处理机制。这些都是Delphi编程基础, 特别是Object Pascal语言,一定要多编写程序,以达到快速熟悉其 语法的目的;并且在后续编程中要自觉运用Delphi程序调试技术 及异常处理方法。