1.5 项目管理器
Delphi用项目(Project)来管理用户开发的应用程序中的各个文件,有序的管理可以极大地提高应用程序开发的质量和速度。
大多数情况下,一个应用程序由一个项目构成。它也可以是包括多个项目的项目组,甚至可以由多个项目组构成。例如,创建一个有两个项目的应用程序,其中一个用来创建应用程序所需的动态链接库,而另一个则用来产生应用程序的可执行文件。
1.5.1 项目组成
Delphi为每个项目建立了相当数目的文件。在这些文件中,一部分是在设计阶段产生的,如项目文件(.DPR)、单元文件(.PAS)和窗体文件(.DFM)等。还有一些则是在编译阶段产生的,如对象映射文件(.DSM)、编译单元文件(.DCU)等。当然,项目中还包括一些非Delphi生成的文件,如位图、图标、鼠标指针等资源文件。
这些文件中的一部分要由用户保存时命名,而另外相当一部分文件由Delphi自动产生,这些文件的命名主要取决于用户为项目和窗体所取的名称,以及Delphi及系统欲定义的文件扩展名。
这些文件构成了一个完整项目,但经常打交道的文件并不多,主要是项目文件(.DPR)、单元文件(.PAS)、窗体文件(.DFM)及一些资源文件。前面已经介绍了窗体文件,这里着重介绍一下单元文件和项目文件。
1.单元文件
单元文件是组成应用源代码的主要部分。无论是窗体事件处理过程还是单独的源代码,都保存在单元文件中。
单元文件可以分为两种:有窗体文件和无窗体文件。每当用户在项目中新建一个窗体,例如使用“File”菜单的“New Form”命令新建窗体,都会自动产生一个单元文件。如果用户需要产生一个无窗体文件,则可以使用“File”菜单中的“New Unit”命令。
下面给出一个典型的有窗体的单元文件的结构。
unit Unit1; //单元文件名 interface //接口关键字,用来标识文件所调用的单元文件 uses //程序用到的公共单元 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; 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 end; end.
代码首句指出了单元名,单元名必须与单元文件名保持一致。如果保存时文件名变为“Myunit.pas”,则首句相应变为
unit My
代码的“uses”语句指出了单元文件在编译时要链接哪些单元,如Windows、Messages、SysUtils、Classes、Graphics、Controls、Forms、Dialogs、StdCtrls等,因为这些单元中包含了你编程中所调用的一些函数、对象等。
“type”语句为窗体的类声明。类声明中包括了窗体中的组件和事件响应过程名。如语句
Button1: TButton;
指出了组件类型(TButton)和组件的Name属性(Button1)。除处理Name属性外,设置其他属性不会影响单元文件源代码。
添加新的事件处理过程对单元文件的影响最大,每为一个事件定义一个处理过程,窗体的类型定义下就会多出一行,执行部分中就会加入一个空白处理过程,窗体文件中也会相应存入一些信息。例如,上面“type”语句下定义了一处理过程:
procedure TForm1.Button1Click(Sender: TObject);
而在实现部分(implementation)中,出现了一空白处理过程:
procedure TForm1.Button1Click(Sender: TObject); begin end;
用户可往“begin”和“end”之间添加自己的事件处理代码。
2.项目文件
项目文件对应用至关重要,由Delphi自动建立,一般用户不需要改变它。项目文件是真正意义上的Pascal源代码文件,它描述了整个应用程序的结构及启动代码。
program Project1; uses Forms, Unit1 in 'Unit1.pas' {Form1}; {$R *.RES} begin Application.Initialize; Application.CreateForm(TForm1, Form1); Application.Run; end.
用户可以通过“Project”菜单的“View Source”命令来查看该文件。
代码首行给出了项目名称。如果保存时文件名变为“MyPro.dpr”,则首句相应变为
program MyPro;
编译得到的程序文件为MyPro.exe或MyPro.dll。
“uses”语句中列出了组成项目的单元文件,其中有些单元文件还有相应的窗体文件,编译项目时,Delphi将首先编译各个单元文件及其相应的窗体文件,然后再将其链接成可执行文件。例如,
Unit1 in 'Unit1.pas' {Form1};
语句说明项目包含了单元文件“unit1.PAS”,而后面的括号对“{Form1}”则说明了单元文件有相应的窗体文件“Form1.DFM”。
接下来是编译指令“{$R *.RES}”,表示把项目中所有资源文件全部包括进来。“begin”和“end”之间的代码段所起的作用是初始化应用程序、创建表单和启动应用程序。
1.5.2 项目管理器
使用项目管理器可以了解项目的构成,并方便地对项目进行管理。
选择“View”菜单的“Project Manager”命令,可以打开项目管理器窗口——“Project Manager”窗口,如图1.7所示。它用来管理当前项目中的组成文件。在项目管理器中列出了当前项目中的各个单元文件和窗体文件,用户可以对它们进行操作。
图1.7 项目管理器窗口
项目管理器由标题栏、工具栏、项目显示窗口和状态栏四部分组成。
1.标题栏
标题栏列出了项目管理器的英文名称“Project Manager”。
2.工具栏
工具栏中包含一个“Project Selector”下拉列表框(从项目中选择需管理的项目),以及三个快捷按钮:“New”按钮(往项目组中新增项目)、“Remove”按钮(从项目组中删除选定项目)和“Activate”按钮(激活项目)。
3.项目显示窗口
项目管理器根据项目文件中的内容,在下面显示窗口中列出了组成项目的所有窗体文件和单元文件(“Files”列)以及它们的路径(“Path”列)。
注意:项目管理器只列出Delphi自己添加的文件,用户手动添加的文件在项目管理器中得不到反映。
4.状态栏
状态栏一般默认不见。如果要显示状态栏,可以在窗口中单击右键,打开一快捷菜单,从中选取“Status Bar”命令。状态栏显示的是项目显示窗口中当前文件的完整路径。
下面介绍如何用项目管理器来进行项目管理。项目管理器的作用主要是用来往应用程序中新增项目或项目组,和从应用程序中删除项目或项目组。另外,利用项目管理器还可以激活项目组中的某个项目为当前项目。如果要往应用程序中新增项目或项目组,则可以执行如下操作。
(1) 单击工具栏上的“New”按钮,打开“New Items”对话框,并选择“New”选项卡,如图1.8所示。
图1.8 “New Items”对话框
(2) 执行如下操作之一。
① 如果要新增项目,单击“Application”图标。
② 如果要新增项目组,单击“Project Group”图标。
(3) 单击“OK”按钮。
如果要从应用程序中删除项目或项目组,可以在项目管理器中选定要删除的项目或项目组,然后单击工具栏上的“Remove”按钮即可。
对于有多个项目或项目组的应用程序而言,经常需要使用激活功能。例如,应用程序包括Project1和Project2两个项目。如果当前项目为Project2,而想编辑Project1,此时就要激活Project1。方法是选定Project1后单击“Activate”按钮。
1.5.3 项目管理
前面介绍了如何利用项目管理器新增或删除项目和项目组及激活项目,下面介绍如何往某个项目中增加、删除文件,以及如何保存项目中的文件。
1.往项目中增加文件
给项目增加文件可分为两种情况:第一种情况是往项目中增加新的窗体或单元文件;第二种情况是往项目中增加已经存在的文件。对于第一种情况,往项目中增加新窗体或新单元文件,可以单击“File”菜单中的“New”级联菜单下的“Form”命令或“Unit”命令。
直接单击工具栏中的“New Form”按钮,可往项目中增加一个新窗体。往项目中新增窗体或单元文件后,Delphi会自动修改项目文件中的“uses”语句,将新增加的窗体或单元文件添加进来。
对于第二种情况,往项目中增加已经存在的文件,可以执行如下操作。
(1) 单击“Project”菜单中的“Add to project”命令,或单击工具栏上的“Add file to project”按钮,打开“Add to Project”对话框,如图1.9所示。
图1.9 “Add to Project”对话框
(2) 选择所需的文件,例如选择单元文件“Unit5_1.pas”。
(3) 单击“打开”按钮。
这样,就将选定文件添加到当前项目中。此时Delphi并没有把该文件移动到项目文件所在的目录中,也没有将该文件复制到项目所在的目录中,只是在项目文件的“uses”语句中声明了所增加的文件的名称及其目录。这样,编译项目时,就能将该文件链接。
2.从项目中删除文件
从项目中删除文件,Delphi并没有将文件从硬盘上删除,只是修改了项目文件中的“uses”语句,将要删除的文件从该语句中去掉而已。如果要从项目中删除文件,可执行如下操作。
(1) 单击“Project”菜单中的“Remove from Project”命令,或单击工具栏上的“Remove file from project”按钮,打开“Remove From Project”对话框,如图1.10(a)所示。
(2) 选择要删除的文件。
(3) 单击“OK”按钮即可。
另外,可利用项目管理器从项目中删除文件,在项目管理器中,右击要删除的单元文件,将打开一个快捷菜单,从中选择“Remove From Project”命令即可,如图1.10(b)所示。
图1.10 “Remove From Project”对话框
3.查看文件
如果要查看项目中的某窗体或文件的源代码,根据需要可以采取如下方法。
(1) 如果要查看某个单元文件的源代码,可以单击“View”菜单的“Units”命令或工具栏中的“View Unit”按钮,打开“View Unit”对话框,如图1.11所示。然后从列表框中选择要查看的单元文件。再单击“OK”按钮。
图1.11 “View Unit”对话框
(2) 如果要查看某个窗体,可以单击“View”菜单的“Forms”命令或工具栏中的“View Form”按钮,打开“View Form”对话框,如图1.12所示。然后从列表框中选择要查看的窗体。再单击“OK”按钮。
图1.12 “View Form”对话框
(3) 打开项目管理器窗口,右击要查看的窗体或单元文件,将打开一快捷菜单,从中选择“Open”命令,即可查看到选定的窗体或选定单元文件的源代码。
如果当前窗口为窗体窗口或窗体对应的单元文件源代码,而用户正好想查看窗体对应的单元文件或单元文件对应的窗体,则可单击“View”菜单的“Toggle Form/Unit”命令,或直接在工具栏上单击“Toggle Form/Unit”按钮。
4.保存项目及其文件
Delphi提供了许多保存命令,用户可以根据需要来选择使用。
(1) 如果要保存当前文件,则可单击“File”菜单中的“Save”命令,或单击工具栏上“Save”按钮。如果该文件是新文件,Delphi将打开一个“Save As”对话框,提示用户输入新文件名。
(2) 如果要将当前文件以新文件名存储,则可单击“File”菜单户的“Save As”命令,打开一个“Save As”对话框,然后输入新文件名,单击“保存”按钮即可。
(3) 如果要保存项目中的所有文件,则可单击“File”菜单中的“Save All”命令,或单击工具栏中“Save All”按钮。如果项目中有新文件,Delphi将打开一个“Save As”对话框,提示用户输入新文件名。
(4) 如果要将当前项目新名称存储,则可单击“File”菜单中的“Save Project As”命令,打开一个“Save Project As”对话框,然后输入新项目名,单击“保存”按钮。
1.5.4 项目编译和运行
运行应用程序前,首先应对应用程序进行编译。Delphi提供了多种编译方式,供用户在不同情况下选用。
1.编译链接
单击“Project”菜单的“Compile项目名”命令,将编译当前项目自上一次编译以来修改过的文件,并将项目中所有文件链接成可执行文件,该命令的热键为Ctrl+F9。
项目的编译过程如下:
(1) Delphi首先将项目中各单元文件编译成以“.DCU”为扩展名的编译单元文件;
(2) 然后开始编译项目文件;
(3) 最后将编译好的文件链接成可执行文件。
2.查看编译过程信息
如果用户想了解Delphi编译过程中的信息,可执行如下操作。
(1) 单击“Tools”菜单的“Environment Options”命令,打开“Environment Options”对话框,并选择“Preferences”选项卡。
(2) 在“Compiling and Running”选项组中选择“Show compiler progress”复选框。
(3) 单击“OK”按钮。
这样,每次用户编译项目时,就会出现一个Compiler消息框,显示项目的编译过程。
3.重建项目图
重建项目的意思是指重新编译项目中所有的文件,包括单元文件和项目文件,并重新建立生成可执行文件所需的一系列文件。当用户不能确定是否有文件被遗漏编译,或想更新编译单元文件(.DCU)和可执行文件(.EXE)时,可采取这一种编译模式。
如果要重建项目,选择“Project”菜单中的“Build <项目名>”命令即可。
4.只编译文件
所谓只编译文件,是指只对项目中的文件进行编译,而不链接它们。这种编译模式通常用于检查文件中的语法错误。
如果只编译文件,则可选择“Project”菜单中的“Syntax check <项目名>”命令。
5.查看编译信息
编译完当前项目后,还可以单击“Project”菜单中的“Information for <项目名>”命令,打开“Information”消息框来查看编译后的信息。“Information”消息框中提供了以下信息,如表1.1所示。
表1.1 “Information”消息框信息
6.编译所有项目
对于有多个项目或项目组的应用程序,经常一次编译并链接所有项目,从而一次性生成可执行文件。
要编译所有项目,单击“Project”菜单的“Compile All Projects”命令即可。
7.重建所有项目
重建所有项目本质上与重建项目并没有什么不同,只不过是针对多个项目操作而已。
重建所有项目使用的命令是“Project”菜单的“Build All Projects”命令。
8.运行
若程序没语法错误,编译后可直接在Delphi集成环境中运行,运行方法是使用“Run”菜单的“Run”命令,或单击工具栏中的“Run”按钮,或直接按F9功能键。
通过简略地介绍Delphi集成开发环境的各个组成部分,我们对它的开发工具有了一个大概的了解,学习了一些基本的使用方法。也许,还有些不懂,不过没关系,以后还会具体学习它们。在Delphi的学习过程中,可以通过帮助文件来解决不懂的问题。当然,Delphi集成开发环境是一个综合的整体,只有全面灵活地掌握和使用,才能开发出理想高效的应用程序。