第4章 过程与函数
一个比较大的程序可以被划分成若干个模块, 每个模块完成一个或几个功能,每个功能可以用 一个程序段来实现,这个程序段被称为“子程 序”。在Delphi中,过程(Procedure)指没有 返回值的“子程序”,而函数(Function)是有 返回值的“子程序”。
4.1 过程
运行结束后没有返回值的子程序称为过程。 在Delphi7中有三种类型的过程:即标准过程、 事件过程和自定义过程。
其中标准过程和自定义过程又可以称为通用 过程。即这两种过程可以独立于事件,被任何过 程或函数调用。 4.1.1 标准过程 标准过程是系统内部已经定义好的过程,不 需要编写代码,也不能改变过程的名称和参数。 标准过程的调用非常简单,在需要调用的位置直 接书写该过程即可 。 4.1.2 事件过程 当对象接受到某个动作时,Windows会通知 Delphi产生一个事件(鼠标单击事件),而 Delphi会自动执行该对象与该事件有关的一段程 序,这就是该对象的一个事件过程。
1.事件过程的创建 在窗体上(或在对象监视器中)选中该对象, 然后在对象监视器的事件(Event)选项卡中选 择相应的事件名,用鼠标双击其右侧的下拉
列表 框,Delphi将自动产生一个默认的事件过程框架, 执行该事件的代码需要添加在框架内。
Delphi产 生的默认事件过程的名称遵循下面的命名原则: 控件名称加上事件类型名(无On) 。 2.事件过程调用 已经创建完成的事件过程可以被其他事件过 程调用 。
4.1.3 自定义过程 一般自定义过程定义在单元的 implementation部分的中{$R *.dfm}后面。 1.自定义过程声明 自定义过程的一般声明格式如下:
? ? ? ? ?
procedure <过程名>[ ( <形参表> ) ]; [局部声明] begin [ <过程语句序列> ] end;
过程的声明必须以procedure开始,包括过程 名,形参表,局部声明部分和以begin开始end 结束的过程语句序列。
第一行必须以“;”分号结束,是过程首部。 其余部分为过程的实现部分,必须包括一个 begin-end结构。End后面也必须以“;”分号 结束,表示过程结束。 <形参表>过程参数的一般书写形式为: ( [Var |Const] <参数名>:<类型>) Var和Const为系统的保留字,Var表示参数传 递方式为地址传递,即形参值的改变将反映到实 参中。Const表示在过程内部不能改变形参的值。 不带这两个参数的形参传递方式为值传递,即过 程内部对形参值的改变将不会反映到实参中。
过程的定义可以有类似下面的两种形式:
?
?
procedure GetSum(V1,V2:Integer;var Sum:Int64); procedure ProcNoPara;
2.自定义过程的创建和使用 一般可以创建两种自定义过程。一种是仅能 本单元中使用,对其他的单元
文件该过程不可见; 另外一种就是还可以在其他单元中使用的公共过 程。要创建能在其他单元中使用的过程,必须将 过程首部声明在单元的公共接口部分(Interface) 中。如果是仅在本单元内部使用的自定义过程, 则必须先创建才能被使用 。
4.2 函数
函数是有返回值的子程序,一般通过函数名 或一个系统预定义的隐含变量Result返回函数的 值。在Delphi中有两种函数,内部函数和自定义 函数。 4.2.1标准函数 标准函数是
系统内部已经定义好的函数。不 能改变标准函数的参数以及返回值类型。 其定义形式如下:
function StrToInt(const S: string): Integer;
表明该函数接受一个常量参数,并返回一个 整型值。
4.2.2 自定义函数 1.函数的定义 一般的语法格式为:
? ? ? ? ?
Function <函数名> [(<形参表>)]:返回类型; [局部声明] Begin [<语句序列>] End ;
自定义函数含有一个以Function开始的函数首 部,包括函数名,函数的形参表和函数的返回值 类型以及返回值类型前面的“:” 冒号和后面 的“;”分号。一个函数可以没有形参表,但必 须有函数返回值类型, 同样也可以
没有局部声明,但必须有一个实现函数功