单元文件是Delphi程序中最重要的文件,它包含了程序中最主要的源代码,无论是窗体和组件的事件处理过程或单独的源代码都保存在单元文件中。对于初学者来说,Delphi的单元文件比较复杂。这里将对Delphi5的单元文件进行介绍。
单元文件分为有窗体文件和无窗体文件两种。每当用户在项目中新建一个窗体,例如使用“File|New Form”或加速按钮创建一个新窗体,Delphi就会自动创建一个相应的单元文件。如果用户需要一个无窗体的单元文件,则应该使用“File|New Unit”菜单命令或在项目管理器中添加一个单元文件。可以说每个窗体对应着一个单元,反过来说则不一定成立。
创建一个新的应用程序时,程序只有一个单元文件Unit1和一个相应的窗体Form1。下面是一个典型的带窗体的单元文件结构:
unit Unit1; //单元名
interface //接口部分
uses //用来申明本单元内访问到的各单元
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, //标准单元
Unit2,Unit3; //用户自定义的单元
type TForm1 = class(TForm) //申明一个新窗体类
Label1: TLabel; //窗体上的组件被申明为新类的对象
Button1: TButton;
ScrollBar1: TScrollBar;
RadioButton1: TRadioButton;
ComboBox1: TComboBox;
procedure Button1Click(Sender: TObject); //所有的事件也被申明为新类的方法
procedure ComboBox1Change(Sender: TObject);
procedure Label1Click(Sender: TObject);
procedure RadioButton1Click(Sender: TObject);
private //私有申明
{ Private declarations }
public //公共申明
{ Public declarations }
end;
var
Form1: TForm1; //申明一个窗体对象
implementation //实现部分
Uses
Unit4;
{$R *.DFM}
end.
在interface(接口部分)起始处的Uses子句指出本单元用到的各单元,其中有系统的标准单元,我们也可以添加自定义的单元。然后定义了一个新的窗体类Tform1,窗体上所有的组件都被申明为新类中的一个对象,而且是Published类型的。所有的事件处理过程也被申明为Published类型,这样就能在设计阶段对组件的属性进行修改或改变处理事件。然后申明了一个新窗体类的窗体对象,该对象名即窗体的Name属性。
implementation(实现部分)包含了程序的执行代码和其它的隐含申明。
不同单元之间的引用可以使用Uses语句。例如,如果Unit1中需要引用Unit2中的变量和对象,可以在Unit1的interface部分的Uses语句中添加单元名Unit2。但是有一点需要注意的是,Delphi中不允许循环引用。所以我们不能在Unit2的interface部分的Uses语句中加入对Unit1的引用。如果Unit2中确实需要引用Unit1中的变量或对象,我们该怎么办呢?我们可以在Unit2的implementation(实现部分)手工添加Uses语句进行申明:
implementation
Uses
Unit1;
interface(接口部分)可以申明一些不同的元素,包括过程、函数、全局变量和数据类型。当申明一个新类并把它放进单元时,可以写入单元的interface部分内,这被称为类的接口(也就是它的申明),也可以写入单元的implementation部分。变量不同的申明具有不同的作用域。变量只有在它的作用域内才有意义。
在定义例程事件或过程内申明的变量,只能在本过程中使用。当程序执行定义该变量的例程时会分配内存给该变量,一旦例程终止,内存会自动释放。
在implementation部分申明的变量,只能在本单元使用,而不能在单元外使用。
在interface部分申明的变量,它的作用域将扩展到使用Uses语句申明本单元的其它单元中。例如,如果Unit2中使用Uses申明引用Unit1,那么Unit2中便可以使用Unit1中在interface部分任何申明的变量。