工程(Project)可以说是Delphi的生命。不可能创建一个没有工程的程序。利用工程可以把全部工作组合到一起,从而创建出可以执行的应用程序。
一般来说,每个工程都需要管理。也许要增加一个新的单元到工程中,或是从工程中删除一个单元;也许需要增加另一种类型的文件(比如二进制资源文件)到工程中。增加和删除单元及其他的工程文件,都需要通过Project Manager来进行的。
工程组(Project Groups)
工程是一个文件集合,这些文件一起起作用即可创建独立的可执行文件或DLL。这就是Delphi IDE涉及到的工程的定义。在现实中,有各种类型的工程,比如一项要完成的工作也可称为工程。
大型工程可以包括一个或多个可执行文件,以及若干个动态链接库(DLLs),由于有些工程由多个(不是单个)可执行程序组成,Delphi允许将若干个工程放在一起组成一个组,从而把组中全部工程当作一个单独的整体来处理。这个整体就叫做工程组。
1、为什么要使用工程组(Why Use Project Groups?)
大家可能会问:工程组有哪些优点?工程组的优点如下:
使完整的软件工程的控制更方便。
修改DLL与测试DLL的EXE可同时进行。
一次可编译、链接一组工程。
可同时打开多个工程,并可在打开的工程间来回切换。
提供了一种组织相关工程的办法。
创建单个可执行文件的工程不需要工程组。一个单个工程不能看作一个组,对么?在单个工程情况下,工程组的概念就不合适了。
但是,设想一下:一个程序包含一个EXE文件和单个DLL,DLL和EXE是联系在一起的。当修改DLL时,一般都希望EXE就在旁边,可以立即测试DLL修改的效果。在这种情况下,使用工程组就会十分有意义,因为EXE和DLL总是在一起的。
可以创建一个包含该EXE和DLL的工程组。当要修改应用程序或DLL时,可打开该工程组(而不是单个工程)。打开工程组后,EXE工程和DLL工程会同时显示出来。可用Code Editor修改DLL或EXE,并在它们之间来回切换。如下图,就是Project Manager窗口,其中打开了这样一个工程组。
使用工程组的另一个原因是:可将相关工程组织在一起。初听起来,这句话好像意义不大,下面来解释。比如一个公司开了一套串行通信组件集合,其中的组件分为三大类:基本串行通信、传真和TAPI,每一大类都包含很多样本程序。
在这种情况下,可以为传真类的程序创建一个工程组,为TAPI类中的程序创建一个工程组,为基本串行通信类中的程序创建一个工程组。这样,用户打开TAPI工程组,将全部的TAPI样本程序都置于其中。整个工程组可以同时编译、链接,因而可以节省时间并简化打开、编译链接每个工程的操作。这里,各个工程不像EXE和DLL那样一起工作,但这些工程是相关的,因而工程组的概念是有意义的。
2、活动的工程(The Active Project)
任何工程组中总有一个活动的工程,活动工程以粗体字显示在Project Manager中。如上面的图中,活动的工程为TestDLL。
当从Delphi主菜单中选取Compile或Build菜单项时,活动工程就会被编译、链接。
每当一个工程被设置成活动工程时,这两个菜单项都会发生改变。例如,如果活动工程的名为Project1,则两个菜单项的名就是【Compile Project1】和【Build Project1】;如果把一个名叫PictView的工程设置为活动工程,则这两个菜单项名就是【Compile PictView】和【Build PictView】。
通过Delphi主菜单或Delphi工具栏来增加元素,比如新增窗体或单元,都会自动添加到当前活动工程中。
把一个工程设置为活动工程的方法有多种。
其中一种方法是:在要设置成活动工程的工程节点中任意选择一项,然后点击位于Project Manager窗口顶部的“Active”按钮。
另一种方法是双击要设置成活动工程的工程节点。
最后一种方法是从工程节点的快捷菜单中选择“Active”菜单项来激活某个工程。
工程管理窗口(The Project Manager Window)
工程管理器是所有工程和工程组的中央控制器。用工程管理器可增加文件到工程中、删除工程中的文件、查看单元或窗体、添加工程到工程组、改变工程的排列次序等等。可选择主菜单上【View | Project Manager】菜单项或按Ctrl + Alt + F11来显示工程管理器。
Project Manager窗口含有一个树形列表控件,它最多显示四层,这四层是:
工程组
工程组内的工程
工程中的窗体和其他文件
窗体节点下的单个窗体文件和单元
自然地,在任何树列表控件(tree view control)中单个节点都可以展开或收缩。Project Manager节点都带有图标来指示该节点是否包含工程、单个文件、窗体或窗体/单元。如下图:
Note
在Project Manager中查看一个单元的路径及文件名,可点击Project Manager窗口中的单元,Project Manager状态栏就会显示该单元的全部路径和文件名。如下图:
1、工程管理器快捷菜单(The Project Manager Context Menus)
工程管理器的大多数工作都是通过工程管理器快捷菜单来进行的。Project Manager有四个独立的快捷菜单,下面分别进行介绍。
(1)工程组快捷菜单(The Project Group Context Menu)
用鼠标右键点击位于Project Manager树顶点的工程组节点,会显示出工程组的快捷菜单。如下图:
【Add New Project…】——打开对象库,选择一个新的应用程序、DLLs、窗体、数据模块、组件或对象库中的其他有效对象。
【Add Existing Project…】——打开一个存储在磁盘上的工程文件,将它添加到工程组中。
【Save Project Group】——保存工程组。工程组的扩展名为.bpg。
【Save Project Group As…】——用一个新工程组名保存工程组。
【View Project Group Source】——显示工程组源文件。工程组源文件是一个特殊文件(a makefile),它包含工程组内所有工程的引用。
【ToolBar】——打开或关闭Project Manager的工具栏。
【Status Bar】——打开或关闭Project Manager的状态栏。
【Dockable】——指明Project Manager是否可泊位。
Note
Project Manager 中每个快捷菜单都含有ToolBar、Status Bar和Dockable菜单项。下面讲解其他Project Manager快捷菜单时不再重复介绍。
(2)工程快捷菜单(The Project Context Menu)
用鼠标右键点击Project Manager中的工程节点,就会显示出工程快捷菜单。如下图:
【Add…】——打开Add to Project对话框,增加文件到工程中。从主菜单或Delphi工具栏选择【Project | Add to Project】,也可以打开该对话框。
【Remove File…】——打开Remove From Project对话框,从工程中删除文件。从主菜单或Delphi工具栏选择【Project | Remove From Project】同样可以打开该对话框。
【Save】——保存工程。也可从主菜单选择【File | Save】保存工程。
【Options】——为工程显示Project Options对话框。也可从Delphi主菜单选择【Project | Options】来显示Project Options对话框。
【Activate】——是工程变成活动工程。
【Compile】——编译工程。
【Build】——建立(编译并连接)工程。
【View Source】——显示工程源文件(DPR文件)。也可从主菜单选择【Project | View Source】来显示工程源文件。
【Close】——关闭工程及全部文件。如果工程时一个已保存工程组的一部分,则该工程节点图标会变灰;它仍是工程组的一部分,但在IDE中不能打开。如果工程是缺省工程组的一部分,则关闭该工程并把它从缺省工作组中移出。
【Remove Project】——从工程组中删除工程。注意,不是把工程从硬盘上删除,只是将它移除工作组。也可点击Project Manager工具栏中的“Remove”按钮来将工程删除出工作组。
【Build Sooner】——往工程树的上部移动工程。编译链接工程时按自上而下的顺序进行的。
【Build Later】——往工程树的下部移动工程。
Note
Project Manager快捷菜单中的内容比本节中介绍的还要多。如果是批处理文件工程或者程序包工程,则工程快捷菜单包含附加菜单项。由于差别不大,就不专门介绍这些附加菜单项。
(3)单元快捷菜单(The Unit Context Menu)
用鼠标右键点击Project Manager中的单元节点时,会显出单元快捷菜单。如下图:
【Open】——在Code Editor中显示单元(对于独立的单元),或在Form Designer中显示窗体(如果单元有相关联的窗体)。
【Remove From Project】——把单元从工程中删除。删除时Project Manager不会给出提示,因而不能撤销删除。如果不小心错删了一个单元,再把它加到工程中就行了。
【Save】——保存单元。也可从Delphi主菜单中选择【File | Save】保存。
【Save As…】——打开Save As…对话框,用新单元名保存该单元,也可从Delphi主菜单中选择【File | Save As…】来完成同样的操作。
(4)文件快捷菜单(The File Context Menu)
用鼠标右键点击除工程组节点、工程节点、单元节点外的节点(通常是.pas或.dfm文件)时,会显示文件快捷菜单。如下图:
这个快捷菜单只有一个菜单项,【Open】菜单项把选择的节点显示在Code Editor或Form Designer中(由所选节点的类型决定是显示在Code Editor中还是Form Designer中)。
2、Project Manager工具栏和键盘命令(The Project Manager Toolbar and Keyboard Commands)
除了Project Manager快捷菜单外,Project Manager有一个工具栏,使用这个工具栏可方便工程管理器的操作。Project Manager工具栏包含三个按钮:
Add New Project按钮。该按钮显示Object Repository对象库,从而可增加新工程到工程组中。也可点击工程组快捷菜单的【Add New Project】菜单项来增加新工程到工程组中。
Remove按钮。该按钮把所选工程、单元、文件等从工程组中删除。
Active按钮。该按钮把所选目标激活成活动工程。
键盘命令包括Delete键和Insert键。当按下Delete键,所选节点就会被删除。若选的是工程节点,则把该工程从工程组中删除;若选的是单元节点,则把单元从所属工程中删除。Insert键的功能与工程快捷菜单【Add to Project】功能一样。
Tip
Project Manager工具栏按钮有大小两种尺寸。拖动工具栏底部可改变工具栏按钮的大小,往上拖显示小按钮;往下拖显示大按钮。如图:
创建并使用工程组(Creating and Using Project Groups)
对于复杂工程,使用工程组时大有益处的,但是使用工程组不是强制的,没有必要每个工程都使用工程组。Project Manager有一个名为ProjectGroup1的缺省工程组,当不专门打开或创建工程组时,可使用这个工程组。不妨按以下步骤试试:
(1)选择【File | Close All】菜单项关闭所有打开的工程或工程组。
(2)选择【File | New Application】创建一个新应用程序。
(3)选择【View | Project Manager】来显示Project Manager。如下图:
ProjectGroup1工程组时一个临时工程组。当从主菜单选择【File | Save All】菜单项时,系统会提示保存工程,而不是保存保存工程组。若要保存该工程组,必须在Project Manager的工程组快捷菜单中使用【Save Project Group】或【Save Project Group As…】菜单项来保存它。
1、增加单元(Adding Units)
要增加一个已存在的单元到工程中,只需要点击Project Manager工具栏上的Add按钮,或从Project Manager工程快捷菜单中选择【Add…】。
如果工程中有一个窗体的与一个单元同名,则不能把这个单元加到该工程中。
2、删除单元(Removing Units)
使用Remove From Project选项可将文件从工程中删除。另外,也可选择要删除的单元,然后按键盘上Delete键。从工程中删除掉的文件并未从硬盘上删除,而只是将它们移除工程编译/链接过程。
Note
从工程中删除单元时要多加小心,不要把工程中其他单元引用的单元删除了。如果删除了工程要用的单元,会导致编译出错。在删除一个单元之前,一定要搞清楚工程是否还要使用该单元。如果不小心删除了工程还需要的单元,可用【Add to Project】选项将它加回到工程中。
点击工程快捷菜单中的【Remove File…】,将会显示出“Remove From Project”对话框,该对话框允许选择多个单元,因此可以同时删除多个单元文件。如下图:
3、查看单元或窗体(Viewing Units or Forms)
要查看单元、窗体或其他文件,只需双击想要查看的窗体或单元节点。还可以从Project Manager快捷菜单中选择【Open】菜单项,窗体或单元就会显示在Form Designer或Code Editor中(根据所选节点的类型)。
建立工程或工程组(Building Projects or Project Groups)
要编译、链接某个工程,可按下列方法之一进行:
用鼠标右键点击Project Manager中的工程机电,再从快捷菜单中选【Build】菜单项。
从Delphi主菜单选择【Project | Build <工程名>】。这个菜单项的名称随着当前活动的工程的工程名自动变化。
按键盘上的Ctrl + F9来编译当前活动工程。
要编译、链接整个工程组,从Delphi主菜单中选择【Project | Build All Projects】,工程组的全部工程都会被编译、链接,顺序是自上而下从工程组的第一个工程到最后一个工程。