1、1第1章 Delphi基础知识一、教学目标通过本章的学习,能够了解 delphi 的基本知识,包括对于集成开发环境,并对 delphi 有一个基本的认识。二、教学要求1. 了解 delphi 的基本知识;2. 掌握 delphi 的集成开发环境。三、教学内容提要1.1 Delphi 简介1.2 Delphi 7 IDE1.3 简单的 Delphi 程序设计1.4 Delphi 的上机步骤四、教学重点、难点及解决方法本章将主要围绕 delphi 的基础知识进行介绍,介绍 delphi 的由来,delphi 的集成开发环境等等。五、课时安排2 学时六、教学设备多媒体七、检测教学目标实现程度的具体措
2、施和要求通过课堂提问的方式来检测学生对基本概念的掌握程度。八、教学内容1.1 Delphi 简介Delphi作为一种可视化的编程环境,经历了7代产品的发展历程: Borland公司在1995年推出了基于Windows平台的Delphi 1。 Delphi 2新增加的主要功能是对32位编程的支持。还增加了如数据模块等多种高效的数据重用功能。 Delphi 3对其组件库进行增强 ,完全支持ActiveX组件及其创建 。 Delphi 4提供了Object Pascal语言的扩展 ,但系统稳定性较差 。 1999年推出Delphi 5增强了数据库的功能 2001年6月推出Delphi 6 ,增加了大
3、量的新组件,使组件数目达350多个,以满足网络开发的需要。 2002年8月推出 Delphi 7 ,在集成开发环境IDE、Web、数据库、编译器、模型生成支持及组件库等很多方面进行了改进 1.2 Delphi 7 IDE1.2.1 认识集成开发环境Delphi 7的IDE主要包括7个部分:主窗口、组件面板、工具栏、窗体设计器、代码编辑器、对象观察器和代码浏览器。2图1-1 Delphi 7的IDEDelphi7组件板包含了350多个组件,是Delphi可视化编程的核心部件,它由27个选项卡组成。组件面板如图所示图1-4 Delphi 7的组件面板包含了IDE中安装的所有的VCL组件和Activ
4、eX组件将组件板上的组件添加到窗体上的三种方法:单击组件板上的所需组件的按钮,然后在窗体适当位置拖动鼠标画出组件,即可将组件添加到窗体的指定位置上。 双击组件板上的所需组件的按钮,即可将组件添加到窗体的中心位置。按下键不放,单击组件板上的所需组件的按钮,所选组件出现蓝色边框,同时对象选择按钮将弹起。 2.窗体设计器在创建新的项目时,窗体设计器是一个空白的窗口。可以用鼠标调整组件在窗体设计器上的位置和大小,还可以用对象观察器和代码编辑器来控制组件的外观和行为 。3.对象观察器利用对象观察器,可以修改窗体或组件的属性,或者使它们能够响应不同的事件 。属性(Property)是一些数据,如高度、颜色
5、、字体等,它们决定了组件在屏幕上的外观。事件(Event)则是一种消息处理机制,它能够捕捉某种情况的发生并做出反应,像鼠标单击和窗口打开就是两种典型的事件。 对象观察器类包括Properties选项卡和Events选项卡 。注意:帮助系统是和对象观察器紧密结合在一起的,想了解某个属性或事件的帮助信息,只要在该属性或事件上按下F1 键34.代码编辑器 代码编辑器是输入代码来指定应用程序行为的地方,也是Delphi 根据应用程序中的组件自动生成代码的地方。当向应用程序中加入一个窗体时,Delphi 会自动创建一个新的单元,并添加到代码编辑器顶部的标签中。5.代码浏览器以一种树状视图方式显示列在代码
6、编辑器中的单元文件。通过它,可以方便地在单元文件中漫游或在单元文件中加入新的元素或者把已有的文件改名。要记住代码浏览器 和代码编辑器 有一对一的关系。 6.源代码生成器当对窗体设计器中可视化组件进行操作时Delphi IDE 自动生成Object Pascal 源代码。当用【File】|【New】|【Application】 菜单命令创建一个新的项目时,将看到屏幕上出现一个空白的窗体设计器,同时,代码编辑器中会自动出现一些代码,如下所示:unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphic
7、s, Controls, Forms,Dialogs;typeTForm1 = class(TForm)private Private declarations public Public declarations end;varForm1: TForm1;implementation$R *.dfmend.从上述源代码清单中可以看出,窗体对象是从TForm继承下来的。下面这一行非常重要:$R*.dfm Pascal语言中的$R指令用于加载一个外部资源文件。*.dfm文件中包含在窗体设计器中创建的表单的二进制代码。其中的“*” 表示与当前单元文件同名的文件。 项目文件的扩展名是.dpr 可以选
8、择主菜单下的【Project】|【View Source】命令把项目源文件调入代码编辑器。 如下用程序示例的项目文件: program Project1;usesForms,Unit1 in Unit1.pas Form1;$R *.resbeginApplication.Initialize;Application.CreateForm(TForm1, Form1);4Application.Run;end.当添加表单和单元时将出现在uses子句中 1.2.2 基于组件的编程思想.早期DOS操作系统和C语言主导的时代,“数据结构+算法”成为构建软件惟一方式 .C+语言和面向对象技术. 20世
9、纪90年代中期流行一种崭新的程序设计概念 :软件可以由可互换的组件构成 组件是一种通过公开的属性、方法、事件,是可以重复使用的一种经过编译的二进制文件,其文件名可以是.OCX或者是.dll,如命令按钮、复选框、单选框、滚动条等都是常见的组件。 1.2.3 Delphi 7的特点Delphi最显著的特点就是高效性和稳定性,主要体现在以下4个方面:可视化开发环境的性能。编译器的速度和已编译代码的效率。编程语言的功能及其复杂性。丰富的VCL1.可视化开发环境可视化开发环境通常可分为3个部分:编辑器、调试窗口和窗体设计器。 2.编译器的速度和已编译代码的效率Pascal编译器最著名特点就是速度快,而D
10、elphi正是建立在这种编译器基础之上的。 增加了链接和各种缓存策略,尤其是在Visual C+和C+ Builder中。3.编程语言的功能及其复杂性汇编是一种最有力的语言,即便是用汇编开发最简单的应用程序,难度也非常大,还可能一无所获。 4.丰富的VCLVCL是Delphi7最重要的组成部分,包含不同种类的组件 。1.2.4 帮助的使用(1)当遇到问题时,可以尝试按下【F1】键,一般情况下Delphi都会准确地定位。(2)如果需要浏览系统的一些帮助内容,比如说对象Pascal语言,可以通过菜单【Help】|【Delphi Help】命令打开【帮助主题:Delphi Help】对话框,在目录标
11、签中展开相关条目,进行系统学习。(3)当使用Windows API函数时,通过【Help】|【Delphi Help】打开的【帮助主题:Delphi Help】对话框中,在【索引】选项卡中可能查不到有关的帮助信息,有两种解决办法: 一种办法是在代码编辑器中输入Windows API函数的名称,然后将光标定位到该名称中,接着按下【F1】键。 另一种办法是通过【Help】|【Windows SDK】打开帮助文件Win32.hlp,在【索引】选项卡中查找。(4)帮助文件打开时,要浏览相关内容,可以按下工具栏中的【】或【=;=;其中 Const 是保留字,表示常量定义段开始 。注意:保留字 Const
12、 可单独一行也可与常量一行。不能在程序中给常量另行赋值,否则将导致语法错误。Delphi 由常量值判断常量名属于哪种类型。(2)类型常量类型常量用于保存数组、记录、过程以及指针等类型的值,不能出现在常量表达式中。在默认的编译器状态下,类型常量的值可改变,但当在程序中加入编译命令$j-时,则类型常量的值在运行期就无法改变。 10声明类型常量的语法规则为:Const:=;其中类型是除文件型和可变型的所有类型,常量值可以是和类型相应的常量表达式。2.3.2 变量1.变量的声明变量在单元、函数或过程的声明部分进行声明,声明的位置决定了变量的作用域。声明包括两部分:变量名和它所属的类型,变量声明的语法格
13、式为:Var:;:;当多个变量具有相同数据类型时,格式如下:Var ,: ;其中,Var 是保留字,表示变量声明段的开始;同类型的 可超过一个,间用“,”分隔; 可以是基本数据类型或是由用户定义的高级数据类型; 2.变量的使用一旦声明了一个变量应及时对它进行初始化,最简单方法就是给变量赋值,在表达式中使用变量。 2.4 运算符与表达式2.4.1 算术运算符与算术表达式1.算术运算符算术运算符对浮点数和整数进行加、减、乘、除和取模运算,取正“+”和取负“-”是单目运算符,其他均为双目运算符。说明:(1)+、- 、*运算中,参加运算的数可以是整型和实型,结果自动向精度高的类型转化。(2)参加除法运
14、算“/” ,结果都是实型的商。(3)参加整数除法“Div” 和求余运算“Mod”的数必须是整型,结果也是整型数,符号与被除数的符号相同,小数部分被舍去。(4)在表达式 a/b、a Div b 和 a Mod b 中,如果 b 的值为 0,将会触发一个错误。 2.算术运算符的优先级 同级运算自左至右,如果含有括号,则先计算括号内表达式的值。3.算术表达式 将数学式改写为算术表达式,考虑三个问题:一是语法,二是优先级,三是类型。 说明:(1)数学式中省略的运算符和表示函数参数的括号必须添加上去 (2)必须注意优先级的处理 ,恰当利用标准函数 ,注意数据类型。 2.4.2 逻辑运算符与布尔表达式逻辑
15、运算符可分为布尔运算符、位运算符和关系运算符。1.布尔运算符只能对两个布尔型操作数进行运算,结果仍为布尔型,True 或 False。其中,NOT 是求“非”,为一元运算符 ; AND 是求“与”,OR 是求“或” ,XOR 是求“异或”,均为二元运算符 。 2.位运算符注意:右移操作时原值的低位丢失,高位补 0;左移操作时原值的高位丢失,低位补 0。 3.关系运算符4.布尔表达式11布尔表达式由布尔运算符和布尔类型的操作数所组成,包括关系运算表达式和运算结果为布尔类型的函数,如 Odd(x)、 FileExists(x)、等。但位运算符的结果是整数类型,不能直接作为布尔操作数。2.4.3 字
16、符串运算符连接运算符“+”主要用于连接两个或更多的字符串。最简单的字符串表达式是字符常量、字符串常量、字符变量、字符串变量或字符函数的引用。字符串表达式格式为:+|当两个字符串用连接运算符连接起来后,第二个字符串直接添加到第一个字符串的尾部,结果是包含两个源字符串全部内容的新字符串。如果要把多个字符串连接起来,每两个字符串之间都要用“+” 号分隔。 2.5 常用系统函数与过程2.5.1 数值运算函数Delphi 的数值运算函数包含了常用的数学函数(如三角函数、对数函数等)和适合计算机数据处理的其他函数(如求数组中的最大值、求三角形的斜边长等) 。2.5.2 字符处理函数对字符的处理主要包括:大
17、小写转换、比较先后顺序、合并、查找、截取、插入、求长度以及类型转换等。2.5.3 日期时间函数调用日期时间函数可对日期和时间进行处理 2.5.4 顺序类型函数1.顺序类型顺序类型指整型、字符型、布尔型、枚举型、子界型 5 种数据类型,如下所述:(1)整数的的序数是其自身;(2)字符的序数是其 ASCII 码;(3)布尔型数据:False 序数为 0,True 为 1;(4)枚举型第一个数据序数为 0,其余类推;(5)子界型第一个数据序数为 1,其余类推。除第一个序数,每一个都有一个前趋值;除最后一个序数,每一个都有一个后继值。九、作业课后习题十、本章小结在本章中,首先介绍了 delphi 的基
18、本语法知识,并对一些常用函数和过程进行了说明。12第 3 章 常用组件一、教学目标通过对本章的学习,要求熟悉 delphi 的窗体与基本组件。二、教学要求1、了解 delphi 的窗体;2、掌握 delphi 常用组件的使用方法三、教学内容提要3.1 窗体3.2 输入显示类组件3.3 按钮类组件3.4 复选框、单选按钮和单选按钮组3.5 列表框、组合框3.6 滚动条3.7 计时器3.8 对话框组件3.9Win 3.1 组件3.10 菜单四、教学重点、难点及解决方法重点是了解 delphi 的各类组件。五、课时安排4 学时六、教学设备课堂教学七、检测教学目标实现程度的具体措施和要求通过课堂提问的
19、方式来检测学生对基本概念的掌握程度。八、教学内容3.1 窗体 3.1.1 Form 组件 窗体是应用程序的操作界面,是放置组件的基础。窗体由标题栏、工作区和边界组成。 Form 的主要属性窗体组件(TForm)在运行时表现为一个窗体,窗体是一个容器构件,它可以包含其他种类的构件,并协同完成应用程序的整体功能。窗体由属性、事件和方法组成。(1)BorderIcons 属性用来制定窗体标题栏上的图标 (2)BorderStyle 属性Borderstyle 属性用来设置窗体的外观和边框 (3)Name 属性Name 属性唯一地标识对象,取值不能为空,若工程中有多个窗体,名称不能相同。 (4)Cap
20、tion 属性用来指定窗体标题栏中说明文字,可以为空。(5)Font 属性Font 属性用来设置窗体中文字的字体、颜色和字号等等,其中 Font.style 属性为集合型。13(6)FormStyle 属性FormStyle 属性用来指定窗体的类型。从窗体类型的角度来看,Windows 环境中的应用程序可以分为以下三类。第一类:多文档界面(MDI)应用程序一般这种应用程序具有一个父级窗口和多个子窗口,可以同时打开多个文档,分别在多个子窗口中显示。 第二类:单文档界面(SDI)应用程序这种应用程序同时只能打开一个文档。第三类:对话框应用程序这种应用程序的主界面基于一个对话框类型的窗体。(7)Ic
21、on 属性Icon 属性用来指定标题栏中显示的图标。 (8)Position 属性Position 属性用来描述窗体大小和显示位置。(9)WindowsState 属性WindowsState 属性来描述窗体显示状态 。2.TForm 的事件 窗体是一个可视化的组件,包括外部事件和内部事件。 3.窗体的方法一些常用方法(过程或函数) 有:Create 、Close 、CloseQuery 、release 、Show 、ShowModal 、Print 。4窗体的创建 创建窗体的方法分为两种:静态创建和动态创建。所谓静态创建窗体是指再工程的编辑、设计时创建新窗体;而动态创建窗体是指在工程的运行
22、时通过代码生成窗体。(1)静态创建新窗体通过集成开发环境中的【File】|【New】|【Application】菜单,创建一个应用程序, (2)动态态创建新窗体在需要某个窗体时,临时创建它,使用后将其立即释放,这种称为窗体的动态创建。3.1.2 弹出对话框窗体Delphi 提供内部对话框有两种。第一种:信息输出对话框 Showmessage 过程、ShowMessageFmt 过程、MessageDlg 函数、MessageDlgPos 函数、CreateMessageDialog 函数。 第二种:信息输入对话框 InputBox 函数、InputQuery 函数。1ShowMessage 过
23、程 其语法格式为:ShowMessage();2ShowMessageFmt 过程的语法格式为: ShowMessageFmt(,);3MessageDlg 函数其语法格式为:=MessageDlg(,HelpCtx); 4MessageDlgPos 函数 其语法格式为:=MessageDlgPos(,HelpCtx,X,Y); 可以指定对话框的显示位置坐标:X,Y。 5CreatMessageDialog 函数其语法格式为:=CreatMessageDialog (,);6InputBox 函数其语法格为:14=InputBox (,);7InputQuery 函数其语法格式为:=Input
24、Query (,);3.2 输入显示类组件3.2.1 Edit 组件编辑框(Edit)是一种通用组件,既可以输入文本,又可以显示文本,编辑框组件位于Standard 组件板中。1Edit 的主要属性 (1)AutoSelect 属性:设置编辑框得到焦点时,文本是否自动被选中。 (2)AutoSize 属性:决定编辑框是否自动随字体的变化而改变大小。 (3)Enable 属性 :用来设置编辑框是否能用。 (4)BorderSytle 属性:设置编辑框边框类型 。(5)MaxLength 属性:设所能接受最大字符数。(6)PasswordChar 属性:设置非#0 字符时,将代替用户输入的字符被显
25、示。 (7)ReadOnly 属性:定编辑框中的文本是否可以编辑。 (8)SelStart 属性:被选中文本的开始位置,或光标在文本中的位置。(9)SelText 属性:被选中的文本 。(10)SelLength 属性:被选中文本的长度。(11)Text 属性:编辑框中的文本内容。(12)CharCase 属性:控制编辑框中文本大小写3.2.2 Label 组件标签组件位于 Standard 组件板中。1Label 的主要属性(1)Caption 属性:用来显示标签的文本。 (2)ShowAccelChar 属性 :决定是否将过程的声明必须以 procedure 开始,包括过程名,形参表,局部
26、声明部分和以 begin 开始end 结束的过程语句序列。 第一行必须以“;”分号结束,是过程首部。其余部分为过程的实现部分,必须包括一个begin-end 结构。End 后面也必须以“;”分号结束,表示过程结束。过程参数的一般书写形式为:( Var |Const :)Var 和 Const 为系统的保留字, Var 表示参数传递方式为地址传递,即形参值的改变将反映到实参中。Const 表示在过程内部不能改变形参的值。不带这两个参数的形参传递方式为值传递,即过程内部对形参值的改变将不会反映到实参中。过程的定义可以有类似下面的两种形式:procedure GetSum(V1,V2:Integer
27、;var Sum:Int64);procedure ProcNoPara;2自定义过程的创建和使用 一般可以创建两种自定义过程。一种是仅能本单元中使用,对其他的单元文件该过程不可见;另外一种就是还可以在其他单元中使用的公共过程。要创建能在其他单元中使用的过程,必须将过程首部声明在单元的公共接口部分(Interface)中。如果是仅在本单元内部使用的自定义过程,则必须先创建才能被使用 。 4.2 函数函数是有返回值的子程序,一般通过函数名或一个系统预定义的隐含变量 Result 返回函数的值。在 Delphi 中有两种函数,内部函数和自定义函数。 4.2.1 标准函数标准函数是系统内部已经定义好
28、的函数。不能改变标准函数的参数以及返回值类型。其定义形式如下:function StrToInt(const S: string): Integer; 表明该函数接受一个常量参数,并返回一个整型值。4.2.2 自定义函数1函数的定义一般的语法格式为:Function ():返回类型;局部声明BeginEnd ;自定义函数含有一个以 Function 开始的函数首部,包括函数名,函数的形参表和函数的返回值类型以及返回值类型前面的“:” 冒号和后面的“;”分号。一个函数可以没有形参表,但必须有函数返回值类型, 同样也可以 22没有局部声明,但必须有一个实现函数功能的函数体,以 Begin 开始,E
29、nd 结束。在 End 后也必须有一个“;”分号表示函数体的结束。2自定义函数的创建和使用对于仅在本过程内部使用的函数,必须遵循先创建在使用的原则。如果想让一个函数对其他的单元也是可见的,则必须将函数首部定义在单元的接口部分。则函数功能的实现和调用之间的位置就不必遵循先创建再使用的规则。同样也需要使用一个与函数的返回值类型相同的变量来接受函数的返回值。 4.3 内部过程和函数内部函数和过程是指定义在一个过程和函数内部,只能由该过程和函数使用的函数和过程,内部程序又称为程序嵌套。1嵌套层次为了准确地表达嵌套层次,通常将嵌套从外向内进行编号,并把相应子程序的层号称为子程序的嵌套深度。一般单元文件为
30、 0 层,其中的子程序从外向内依次为 1 层、2 层、3 层、。 有嵌套关系的子程序,若层号相差为 1,称为相邻层,并称层号小的为外层子程序,层号大的为内层子程序;若层号相差大于 1,则称为隔层。 子程序的嵌套要求外层子程序能够完全包含内层子程序,不允许局部包含,即不允许交叉。2子程序的调用规则Delphi 中,子程序调用必须遵循如下规则:(1)子程序可以调用其相邻内层的子程序,不能隔层调用。如图 4-4 所示,A1 可以调用 A1B 和A1C 但不能调用 A3。(2)内层子程序可以调用外层的子程序而且允许隔层调用。如 A2B 可以调用 A2,A3 调用 A1(3)同一层的子程序,允许后定义的
31、子程序调用先定义的子程序,如 A2C 可以调用 A2B但是 A2B 不可以调用 A2C。(4)如果需要调用同层中后定义的子程序,必须用保留字forward(超前引用)对后面的子程序提前说明。4.4 参数的传递4.4.1 形式参数与实际参数形式参数是指出现在过程或者函数首部“形参表”中的变量名,表示用于接收数据的变量。实际参数是指在调用过程或是函数时,传递给过程或函数的常量、变量或表达式。在过程或是函数的定义中,使用形式参数来确定该过程或函数所需要的参数的个数、类型以及参数之间的次序。在调用该过程或是函数时,实际参数将替换形式参数,形参和实参之间的对应关系为:第一个形参接受第一个实参的值,第二个
32、形参接受第二个实参的值,依次类推。4.4.2 参数的传递方式在 Delphi 中,有两种参数的传递方式, “按值传递”和“按地址传递” 。在过程或者函数的首部“形参表 ”中的参数前面使用系统的保留字 Var 或者 Out 的形参变量表示为“按地址传递” ,使用 Const 或没有任何保留字的形式参数,将使用 “按值传递”的方式。声明为“按值传递”的参数仅负责得到实际参数的值,不保留内部对该参数的改变,而声明为“按地址传递”的参数将保留函数或过程内部对实际参数值的改变,并在调用结束后返回该值。23“按地址传递”的参数实参和形参的类型必须一致,而“按值传递”的实参和形参之间仅需要赋值相容即可。4.
33、4.3 使用缺省参数在声明函数或过程中,可以给形参指定一个缺省的值,在调用时,如果没有给形参指定实参,则系统自动使用缺省的值,如果赋值,则使用实际参数的值。缺省参数声明的方法是在形参的类型后面使用“=”等号,并给出具体的常量值。但是需要注意的是,如果后面的参数没有使用缺省参数,不允许仅对前面的参数使用缺省参数。 4.4.4 赋值兼容与调用约定赋值兼容是指变量可以进行赋值或进行参数传递。当两个类型要进行赋值操作而又不满足赋值兼容时,将产生编译错误。Object Pascal 提供了五种过程和函数的调用方式,分别为Register,Pascal,Cdecl,Stdcall,SafeCall。缺省的
34、调用方式是 Register 方式。 Register 和Pascal 调用方式传递参数是从左到右,而 Cdecl, Stdcall 和 Safecall 调用方式传递参数则是从右到左。 Register 调用方式自动清除调用所使用的堆栈和寄存器,负责处理调用错误,同时也是速度最快的调用方式。 4.5 变量的作用域变量的作用域是指变量可以被识别的范围。4.5.1 公有变量和私有变量一般 Delphi 的单元具有下面的结构unit 单元名 /单元首部interface /单元接口部分implementation /单元实现部分 end. /单元结束 在单元的接口部分(Interface)声明的变
35、量属于公有变量,不仅可以被本单元中的所有过程和函数使用,同时还可以被其他单元中的过程和函数使用。在单元的实现部分后 声明的变量属于私有变量,不能被其他单元使用。 4.5.2 全局变量和局部变量局部变量是指在过程或函数的内部声明的变量;而定义在单元的实现部分的变量,对整个单元内部的过程和函数都是有效的,是全局变量。公有变量也是全局变量。当全局变量和局部变量的名称相同时,在过程和函数的内部,使用的是局部变量的值。4.5.3 变量的存储方式从空间上来讲,全局变量的作用范围是整个程序,局部变量仅在本程序段内部有效。 从变量的存储时间上来看,全局变量是静态存储,局部变量是动态存储。所谓的静态存储是变量在
36、程序运行期间一直占有固定的存储空间,直到整个程序结束变量所占用的空间才释放。而动态存储则是程序在运行期间根据需要动态的分配存储空间,子程序一旦结束,变量所占有的存储空间立即释放。一般内存中供程序使用的区域可以分为三个部分,程序区,静态存储区和动态存储区。在动态存储区中存放的数据有:函数或过程的形式参数,函数和过程内部声明的局部变量以及函数和过程调用时的现场保护和返回地址等。 九、作业课后习题十、本章小结在本章中,首先介绍了 delphi 的过程与函数的概念,并要求能对其应用。24第 5 章 高级数据类型一、教学目标通过对本章的学习,要求熟悉 delphi 的各种高级数据类型。二、教学要求1、掌
37、握 delphi 的各种高级数据类型;三、教学内容提要5.1 枚举类型5.2 子界类型5.3 集合类型5.4 数组与记录类型5.5 指针类型四、教学重点、难点及解决方法重点是了解熟悉 Delphi 的各种高级数据类型。五、课时安排4 学时六、教学设备课堂教学七、检测教学目标实现程度的具体措施和要求通过课堂提问的方式来检测学生对基本概念的掌握程度。八、教学内容5.1 枚举类型5.1.1 枚举类型的定义与变量声明1.枚举类型的定义枚举类型使用一组有限的标识符来表示一组连续的整数常数,它的值是有限的。枚举类型的定义格式如下:type=(,);说明:(1)type 是系统的保留字,表示定义高级数据类型
38、的开始。25(2)表示该类型数据中的元素,圆括号中列出了该类型数据的所有取值,这些取值又称为枚举常量。(3) 同一个枚举常量不允许重复出现在同一个枚举类型定义中,也不允许同时出现在不同的枚举类型定义中。2.枚举类型变量的声明其声明的格式与其他类型变量的声明完全相同 例如:Var C: Color;该语句声明了一个枚举类型 Color 的变量 C。5.1.2 枚举类型的运算1使用函数Object Pascal 为枚举类型定义了 5 个枚举函数,可以进行特殊的运算 。2.关系运算由于每个枚举常量对应一个唯一的序数,因此可以在枚举常量之间进行关系运算。如在上述定义中,sunsat 的值为假( fal
39、se) 。5.2 子界类型5.2.1 子界类型的定义子界类型的定义格式如下:type=;5.2.2 子界类型的运算子界类型所允许的运算与其基类型所允许的运算相同,如基类型为整型子界类型变量可以进行算术、关系等运算,而基类型为枚举类型的子界类型变量仅能进行关系运算。5.3 集合类型集合结构是指具有相同性质的对象的全体,构成集合的每个对象称为集合的元素 。注意:(1)集合中的元素是互异的 、无序的 。(2)集合元素个数不能超过 256 个。(3)元素与集合的关系是“属于”或“不属于” ,二者必取其一且仅取其一。 5.3.1 集合类型的定义其定义格式如下:type= set of;说明:(1)表示集
40、合中各元素的类型,可以是字符型、布尔型、枚举型和子界等顺序类型,不能是整型、实型和其他的构造类型。(3)若为枚举类型或子界类型,则必须先定义该基类型,再定义集合类型。(4)一个集合最多只能有 256 个元素。另外,只有有序的类型才能跟关键字 set of .5.3.2 集合变量的声明其声明格式与其他类型变量的声明完全相同 。5.3.3 变量集合的取值集合变量不同其他变量,它不是一个单独元素,而是一系列元素的一集合。集合变量的取值称为集合值,其一般表现形式如下:,如果集合类型的基类型有 n 个元素,则该集合类型变量的取值有 2n 个,包括一个空集合( ) 。5.3.4 集合类型的运算集合类型的数
41、据可以进行 3 大类运算:一类是集合对集合的并、交、差运算,其结果为集26合值;一类是集合的关系运算。5.4 数组与记录类型数组类型(Array)是一些具有相同类型的元素按一定顺序组成的序列。数组中的每一个数据元素都可以通过数组名来存取,它们被顺序安排在内存中的一段连续的区域中。Object Pascal 提供的数组分为静态数组和动态数组。而记录类型可以将不同的数据集中 在一起,并作为一个整体进行操作。 5.4.1 静态数组静态数组在程序初始化时必须分配内存单元,明确其固定的大小和元素的数据类型。1一维静态数组数组通常分为为一维、二维和多维数组,定义一维静态数组类型的格式为:type=arra
42、yof ; Object Pascal 允许的下标的类型为整数类型、字符类型、布尔类型、子界类型、枚举类型等,而元素的类型可以 是任意的数据类型,并且在同一数组中,所有元素的数据类型必须相同。对于用户定义的数据类型作为下标类型,在使用之前必须声明。 要访问数组中元素,可以用数组名加方括号,方括号内是元素的下标值 ,方括号内的下标值必须符合数组类型中下标类型的定义,其类型必须与下标类型一致,其值在下标取值范围内。而且下标也可以是表达式。使用 Object Pascal 提供的标准函数 Low 和 high ,可以返回一个数组的最小下标值和最大下标值,而函数 Length 可以返回数组的长度。2二
43、维静态数组二维数组是指一个一维数组中的元素类型又是一个一维数组,其一般形式为:type=Arrayof Arrayof ;也可以把上述形式写成下面的形式:type=Array,of ;3多维静态数组多维静态数组的一般格式:type=Array,of ;5.4.2 动态数组动态数组在定义和声明时仅指定数组的类型,而不指定数组的大小,只是在程序设计中为程序动态地开辟存储空间。1一维动态数组一维动态数组的定义格式如下:type=array of 也可以在变量声明中直接声明动态数组,其格式为:var:array of ;动态数组的声明中没有给出数组的下标类型,因此具有不确定的大小。动态数组的大小通过调
44、用标准过程 Setlength 来明确。 2多维动态数组声明多维动态数组采用递归定义的方式,如下:type=array of array of array of ;27var:或者采用如下方式定义多维动态数组变量: var: array of array of array of ;多维动态数组声明后,使用 Setlength 过程设置动态数组的大小 。5.4.3 记录类型1记录类型的定义记录类型定义的格式如下:type =Record:;:;.:;end;其中, 可以是多个合法的域名标识符,域名又称为字段名,可以是任意数据类型。同一个记录类型中不能有同名的字段,而因为作用域的不同,记录内的字段
45、名与记录外的标识符可以相同。2记录域的访问由于记录类型中各字段的类型不同,所以不能同时访问记录的多个字段,而只能对记录的单个字段进行访问。有两种方法:(1)记录变量名限定为了标识记录字段所属的记录变量,使用记录变量名进行限定,格式如下:.则为记录的单个字段赋值可以使用如下语句:C1.Custid:=1;C2.IfPay:=True;(2)使用 With 语句如果需要经常访问记录的字段,每次都用记录变量名进行限定非常麻烦,可以使用 With 语句加以简化。With 语句格式如下:With DO 其中, 可以是简单语句,也可以是复合语句。在中字段的访问不需要加记录变量名进行限定 。3记录的变体部分
46、带有变体部分的记录类型的声明格式为:type =Record:;:;.:;Case : of:;:;:;end;28注意:(1)Case 前面的声明部分同平常的记录类型声明一样,但如果记录域中含有变体部分,则变体部分应位于记录域的最后。(2)变体部分总识别字段标识符是可选的,省略时连同“: ”号一起省略,在同一记录域中必须是唯一的。识别字段类型必须是顺序类型,如果是枚举或子界类型,则必须事先声明。其中的字段列表 i 同普通的记录类型中域名表的声明相同。其功能应用类似于选择结构中的 Case语句。5.5 指针类型指针是一种特殊的数据类型,指针类型(Pointer)的变量称为指针变量。指针变量具有
47、一般变量的三个基本要素,即变量名、变量类型、变量值,它与一般变量的不同,它是用来存放其他变量内存地址的一种变量。5.5.1 指针变量的声明定义指针类型的语法如下:type=其中, 可以是基本数据类型,如整型、实型、字节型等,也可以是高级数据类型,如集合、数组、集合等类型。 5.5.2 指针变量的赋值为指针变量赋值的格式如下::=其中, “”操作符是个一元操作符,用于获取操作数的内存地址,后面的操作数可以是变量、过程和函数等。5.5.3 无类型指针变量无类型的指针是指指针变量在声明时没有指明基类型,无类型指针在声明中只使用Pointer,其声明格式如下:var:Pointer;无类型的指针的作用
48、是它可以指向任何类型 ,对于无类型指针,不能用指针变量符号后加的形式来引用它的动态变量。5.5.4 字符指针类型字符指针类型即 Pchar 数据类型,是一个指向以 NULL 字符结尾的字符串的指针。主要用于与外部函数如在 Windows API 中所用的函数兼容。在 Delphi 7 中,可以把一个字符串直接赋值给一个 Pchar 类型的变量。 5.5.5 指针变量的动态使用1New 过程和 Dispose 过程如果不使用运算符为指针变量赋值,则指针变量称为动态指针变量,动态变量在访问之前必须首先分配内存单元。Object Pascal 提供了标准过程 New,用来为动态变量分配内存单元,并把
49、该单元的地址赋给指针变量,所分配单元的大小由指针所指的类型决定。如果应用程序的堆栈中已没有足够的空间,将触发 EoutOfMemory 异常。调用 New 过程的格式如下:New();调用过程 New(p)之后,可以用“p”表示一个整型的动态变量,对其进行操作。当程序不再需要使用动态变量时,就调用标准过程 Dispose 删除 New 所创建的动态变量,并释放所分配的内存单元。调用 Dispose 过程的格式如下:Dispose();2GetMem 过程和 FreeMem 过程标准过程 GetMem 用于为动态变量申请一块指定大小的内存区域,并把该区域的起始地址赋给指针变量。如果应用程序的堆栈中已没有足够的空间,将触发 EoutOfMemory 异常。调用29GetMem 过程的格式如下:GetMem(,);如果程序不再需要使用动态变量时,就调用标准过程 FreeMem 删除 GetMem 创建的动态变量,并释放所分