delphi程序设计.1
Delphi应用程序框架和设计
第4章 应用程序框架和设计
本章内容:
1. 理解Delphi环境和项目的体系结构
2. 构成Delphi5项目的文件
3. 项目管理提示
4. Delphi5项目的框架类
5. 定义公共体系结构----使用对象库
6. 一些项目管理的功能
本章主要介绍Delphi的项目管理和体系结构,将告诉你怎样正确使用窗体(Form)以及怎样运用它们的功能和可视化特征。本章将讨论应用程序启动/初始化过程、窗体重用/继承以及增强的用户界面等技术。本章还要介绍下列构成Delphi5应用程序的类:TApplication、TForm、TFrame和TScreen。我们将向你证明掌握这些概念有助于正确建立应用程序。
4.1理解Delphi环境和项目的体系结构
要正确建立和管理Delphi5项目,至少有两个重要因素。第一是要了解创建项目的开发环境的细节,第二是要知道构成Delphi5项目的体系结构。这一章并不带你深入了解Delphi5的开发环境(Delphi文档介绍了怎样使用这个环境);相反,这一章只讲述Delphi5 IDE的特点,以帮助你更有效地管理项目。本章还要解释Delphi应用程序的体系结构。这不但使你能够充分发挥开发环境的特点,而且使你能够正确使用其固有的体系结构。
我们的第一个建议是:熟练掌握Delphi5开发环境。本书假设你已经熟悉Delphi5的IDE。其次,本书假设你已经读过Delphi5的文档。但是,你仍然应该把Delphi5的菜单和对话框都打开一遍。如果遇到什么不清楚的选项、设置或操作,应该打开在线帮助从中找到答案。在这里所花费的时间将被证明是值得的(更不用说还学会了如何有效地使用在线帮助)。
提示:在所有参考工具里面,Delphi5的帮助系统无疑是最有价值和最快的。学会如何利用它在数千页的帮助主题中进行浏览是非常有用的。
Delphi5的帮助包括了从怎样使用Delphi5的环境到Win32 API的细节以及复杂的Win32结构等内容。要快速获得帮助,可以在编辑器中键入帮助主题,并使光标落在该主题上,然后按下Ctrl+F1键,帮助信息屏幕就会立即显示出来。也可以在对话框中单击Help按钮,或者在一个组件上按下F1键来获得帮助信息。还可以选择Delphi的Help菜单来浏览帮助系统。
4.2构成Delphi5项目的文件
一个Delphi5项目由若干个相关的文件构成。一些文件是在设计时(如定义主窗体)创建的。其他文件是在编译项目的时候生成的。要有效地管理Delphi5的项目,必须知道其中每一个文件的用途。
Delphi5的文档和在线帮助都详细介绍了项目中的文件。让我们先回顾一下这些文档,以确保你已经熟悉了这些文件。
4.2.1项目文件
项目文件是在设计时创建的,它的扩展名是.dpr。这个文件也是主程序文件。项目文件是主窗体以及其他自动创建的窗体实例化的地方。一般不需要编辑项目文件,除非要执行程序初始化例程、显示启动画面或执行其他必须在程序启动时运行的例程。下面的代码是一个典型的项目文件:
Pascal程序员会把项目文件看作是标准的Pascal源文件。注意uses子句列出了主窗体单元Unit1。项目文件以同样的方式列出项目的所有窗体单元。下面这行代码用于引用项目的资源文件:
这一行告诉编译器去链接一个资源文件,该资源文件名与项目文件相同,但扩展名是.res。项目的资源文件中包含了程序图标和版本信息。
最后,begin..end之间的语句是应用程序要执行的主代码。在这个例子中,创建了主窗体即Form1。当Application.Run这条语句执行后,Form1作为主窗体显示出来。后面将会介绍,可以在begin..end之间加入自己的代码。
4.2.2单元文件
单元文件是Pascal源文件,它的扩展名是.pas。有三种类型的单元文件:窗体/数据模块和框架的单元文件、组件的单元文件和通用的单元文件。
1. 窗体/数据模块和框架单元文件是由Delphi5自动生成的。每个窗体/数据模块或框架都有一个对应的单元文件。例如,不能让两个窗体共用一个单元文件。为了解释窗体文件,我们不在窗体、数据模块和框架之间进行区分。
2. 组件的单元文件是由程序员或Delphi5创建新的组件时生成的。
3. 通用的单元文件是由程序员创建的,用于声明在应用程序中要访问的数据类型、变量、过程、类等。
后面将详细介绍这些单元的细节。
4.2.3窗体文件
窗体文件存储了窗体的二进制信息。当创建一个窗体时,Delphi5将同时创建一个窗体文件(扩展名为.dfm)和一个Pascal单元文件(扩展名为.pas)。如果打开一个窗体的单元文件,会看到下面这行语句:
这一行告诉编译器去链接对应的窗体文件(名称与单元文件相同,但扩展名是.dfm)到项目中。
一般不用直接编辑窗体文件(尽管可以这么做)。可以用Delphi5编辑器打开一个窗体文件,这样就能够查看或编辑文本形式的窗体文件了。要打开一个窗体文件,先选择File|Open菜单命令,然后选择只打开窗体文件(.dfm)的选项。也可以在窗体设计器上单击鼠标右键,在弹出的菜单中选择View as Text命令。当打开文件后,会看到窗体的文本形式。
查看窗体的文本形式会带来一些方便,因为可以从中看出非缺省的属性设置以及窗体上有那些组件。编辑窗体文件是修改组件类型的方法之一。例如,假设一个窗体上有一个TButton组件:
如果把objectButton1:TButton这一行改为"objectButton1:TLabel",那么组件的类型就被改为TLabel。当打开这个窗体时,将会看到一个标签而不是一个按钮。
注意:在窗体文件中修改组件类型可能会导致错误。例如,TButton原来有TabOrder属性,如果把TButton改为TLabel,由于TLabel没有TabOrder属性,这就会导致错误。不过,不用手工去更正它,因为当保存这个窗体时,Delphi会自动进行更正。
警告:编辑窗体文件时要特别小心。如果操作失误,可能会导致Delphi5无法打开这个窗体文件。
注意:Delphi5的新功能允许以文本文件格式保存窗体。这样就可以利用其他像记事本这样的通用工具来编辑窗体。只要在窗体上单击右键打开关联菜单,然后选择Text DFM命令。
4.2.4资源文件
资源文件(.res)中包含了二进制数据,也称为资源,这些资源将链接到应用程序的可执行文件中。.res文件是Delphi5自动创建的,包含应用程序的图标、应用程序版本信息及其他信息。要把资源加入到应用程序中,可以先创建一个单独的资源文件,然后把它链接到项目中。要创建资源文件,可以使用专门的资源编辑器,例如Delphi5提供的ImageEditor或ResourceWorkshop等。
警告:不要编辑由Delphi在编译时自动生成的资源文件。如果那样的话,下次编译时所做的修改有可能丢失。如果要在应用程序中加入其他资源,应当创建另外一个和项目文件不同名的资源文件,然后参照下面这一行把资源链接到项目中:{$R MYRESFIL.RES}
4.2.5项目选项及桌面设置文件
项目选项文件(扩展名为.dof)存储了Project|Options菜单命令所设置的项目选项。它是在第一次保存项目时创建的,以后每次保存项目时都会保存这个文件。
桌面设置文件(扩展名为.dsk)存储了Tools|Options菜单命令所设置的桌面选项。桌面设置与项目选项不同,项目选项与具体项目有关,而桌面设置作用于Delphi5环境。
提示:错误的.dsk或.dof文件在编译时可能导致像GPF这样不可预测的错误。如果真的出现这种情况,应当把.dof和.dsk文件都删除掉。当保存项目或退出Delphi5时会重新生成这两个文件。IDE和项目又恢复到默认设置。
4.2.6备份文件
自第二次保存开始,Delphi5为项目文件和PAS单元文件生成备份文件。备份文件是上次保存的文件的副本。项目文件的备份文件的扩展名是.~dp。单元文件的备份文件的扩展名是.~pa。
窗体文件的二进制备份文件也是在第二次保存时创建的。窗体文件的备份文件的扩展名是.~df。
删除备份文件一般不会有什么问题。如果不想生成备份文件,可以在Editor Properties对话框的Display页上不选中Create Backup File选项。
4.2.7包文件
包类似于动态链接库,它的代码可以被几个应用程序共享。不过,包是Delphi特有的,用于共享组件、类、数据和代码。把组件放到包中,而不是直接链接到应用程序中,可以大大减少应用程序的长度。后面的章节将进一步介绍包。包的源文件的扩展名是.dpk(Delphi Package的缩写),编译后就会生成一个.bpl文件(一个.bpl文件类似于一个动态链接库)。这个.bpl文件由若干个单元或.dcu(Delphi Compiled Units的缩写)文件组成。与源文件对应的中间文件其扩展名是.dcp(Delphi Compiled Package的缩写)。这些内容如果一时搞不清楚就先不要管它,我们会在后面详细介绍。
4.3项目管理提示
通过良好的组织和代码重用,可以优化开发过程。下面提供一些有关项目管理的建议。
4.3.1一个项目一个目录
应当把一个项目中的文件与另一个项目中的文件分开。这样可以避免一个项目的文件覆盖另一个项目的文件。
你最好也把一个项目放在一个单独的目录中。同时,应当规划好一个项目中文件的命名约定。 (参见第6章"代码标准文档")。
4.3.2共享代码的单元
最好把那些需要被其他应用程序共享的例程,放到一个单独的单元中。一般地,先在磁盘中创建一个目录,然后把需要共享的单元放到这个目录中。当一个项目要共享其中的某个单元时,只要把那个单元的名称加到uses子句中就行了。
另外,必须把共享单元所在的目录加到Project|Options对话框的Directories/Conditionals页上的SearchPath框中。这样,Delphi5就知道到哪里找这个单元。
提示:通过项目管理器,可以把其他目录中的单元加到当前项目中,Delphi会自动添加搜索路径中。
为了解释如何使用共享单元,清单4-1列出了一个短小的单元文件StrUtils.pas,其中定义了一个简单的字符串处理函数。实际上,一个
补充:软件开发 , Delphi ,