工程(Project)可以說是Delphi的生命。不可能創(chuàng)建一個(gè)沒有工程的程序。利用工程可以把全部工作組合到一起,從而創(chuàng)建出可以執(zhí)行的應(yīng)用程序。
一般來說,每個(gè)工程都需要管理。也許要增加一個(gè)新的單元到工程中,或是從工程中刪除一個(gè)單元;也許需要增加另一種類型的文件(比如二進(jìn)制資源文件)到工程中。增加和刪除單元及其他的工程文件,都需要通過Project Manager來進(jìn)行的。
工程組(Project Groups)
工程是一個(gè)文件集合,這些文件一起起作用即可創(chuàng)建獨(dú)立的可執(zhí)行文件或DLL。這就是Delphi IDE涉及到的工程的定義。在現(xiàn)實(shí)中,有各種類型的工程,比如一項(xiàng)要完成的工作也可稱為工程。
大型工程可以包括一個(gè)或多個(gè)可執(zhí)行文件,以及若干個(gè)動(dòng)態(tài)鏈接庫(DLLs),由于有些工程由多個(gè)(不是單個(gè))可執(zhí)行程序組成,Delphi允許將若干個(gè)工程放在一起組成一個(gè)組,從而把組中全部工程當(dāng)作一個(gè)單獨(dú)的整體來處理。這個(gè)整體就叫做工程組。
1、為什么要使用工程組(Why Use Project Groups?)
大家可能會(huì)問:工程組有哪些優(yōu)點(diǎn)?工程組的優(yōu)點(diǎn)如下:
使完整的軟件工程的控制更方便。
修改DLL與測試DLL的EXE可同時(shí)進(jìn)行。
一次可編譯、鏈接一組工程。
可同時(shí)打開多個(gè)工程,并可在打開的工程間來回切換。
提供了一種組織相關(guān)工程的辦法。
創(chuàng)建單個(gè)可執(zhí)行文件的工程不需要工程組。一個(gè)單個(gè)工程不能看作一個(gè)組,對么?在單個(gè)工程情況下,工程組的概念就不合適了。
但是,設(shè)想一下:一個(gè)程序包含一個(gè)EXE文件和單個(gè)DLL,DLL和EXE是聯(lián)系在一起的。當(dāng)修改DLL時(shí),一般都希望EXE就在旁邊,可以立即測試DLL修改的效果。在這種情況下,使用工程組就會(huì)十分有意義,因?yàn)镋XE和DLL總是在一起的。
可以創(chuàng)建一個(gè)包含該EXE和DLL的工程組。當(dāng)要修改應(yīng)用程序或DLL時(shí),可打開該工程組(而不是單個(gè)工程)。打開工程組后,EXE工程和DLL工程會(huì)同時(shí)顯示出來?捎肅ode Editor修改DLL或EXE,并在它們之間來回切換。如下圖,就是Project Manager窗口,其中打開了這樣一個(gè)工程組。
使用工程組的另一個(gè)原因是:可將相關(guān)工程組織在一起。初聽起來,這句話好像意義不大,下面來解釋。比如一個(gè)公司開了一套串行通信組件集合,其中的組件分為三大類:基本串行通信、傳真和TAPI,每一大類都包含很多樣本程序。
在這種情況下,可以為傳真類的程序創(chuàng)建一個(gè)工程組,為TAPI類中的程序創(chuàng)建一個(gè)工程組,為基本串行通信類中的程序創(chuàng)建一個(gè)工程組。這樣,用戶打開TAPI工程組,將全部的TAPI樣本程序都置于其中。整個(gè)工程組可以同時(shí)編譯、鏈接,因而可以節(jié)省時(shí)間并簡化打開、編譯鏈接每個(gè)工程的操作。這里,各個(gè)工程不像EXE和DLL那樣一起工作,但這些工程是相關(guān)的,因而工程組的概念是有意義的。
2、活動(dòng)的工程(The Active Project)
任何工程組中總有一個(gè)活動(dòng)的工程,活動(dòng)工程以粗體字顯示在Project Manager中。如上面的圖中,活動(dòng)的工程為TestDLL。
當(dāng)從Delphi主菜單中選取Compile或Build菜單項(xiàng)時(shí),活動(dòng)工程就會(huì)被編譯、鏈接。
每當(dāng)一個(gè)工程被設(shè)置成活動(dòng)工程時(shí),這兩個(gè)菜單項(xiàng)都會(huì)發(fā)生改變。例如,如果活動(dòng)工程的名為Project1,則兩個(gè)菜單項(xiàng)的名就是【Compile Project1】和【Build Project1】;如果把一個(gè)名叫PictView的工程設(shè)置為活動(dòng)工程,則這兩個(gè)菜單項(xiàng)名就是【Compile PictView】和【Build PictView】。
通過Delphi主菜單或Delphi工具欄來增加元素,比如新增窗體或單元,都會(huì)自動(dòng)添加到當(dāng)前活動(dòng)工程中。
把一個(gè)工程設(shè)置為活動(dòng)工程的方法有多種。
其中一種方法是:在要設(shè)置成活動(dòng)工程的工程節(jié)點(diǎn)中任意選擇一項(xiàng),然后點(diǎn)擊位于Project Manager窗口頂部的“Active”按鈕。
另一種方法是雙擊要設(shè)置成活動(dòng)工程的工程節(jié)點(diǎn)。
最后一種方法是從工程節(jié)點(diǎn)的快捷菜單中選擇“Active”菜單項(xiàng)來激活某個(gè)工程。
工程管理窗口(The Project Manager Window)
工程管理器是所有工程和工程組的中央控制器。用工程管理器可增加文件到工程中、刪除工程中的文件、查看單元或窗體、添加工程到工程組、改變工程的排列次序等等?蛇x擇主菜單上【View | Project Manager】菜單項(xiàng)或按Ctrl + Alt + F11來顯示工程管理器。
Project Manager窗口含有一個(gè)樹形列表控件,它最多顯示四層,這四層是:
工程組
工程組內(nèi)的工程
工程中的窗體和其他文件
窗體節(jié)點(diǎn)下的單個(gè)窗體文件和單元
自然地,在任何樹列表控件(tree view control)中單個(gè)節(jié)點(diǎn)都可以展開或收縮。Project Manager節(jié)點(diǎn)都帶有圖標(biāo)來指示該節(jié)點(diǎn)是否包含工程、單個(gè)文件、窗體或窗體/單元。如下圖:
Note
在Project Manager中查看一個(gè)單元的路徑及文件名,可點(diǎn)擊Project Manager窗口中的單元,Project Manager狀態(tài)欄就會(huì)顯示該單元的全部路徑和文件名。如下圖:
1、工程管理器快捷菜單(The Project Manager Context Menus)
工程管理器的大多數(shù)工作都是通過工程管理器快捷菜單來進(jìn)行的。Project Manager有四個(gè)獨(dú)立的快捷菜單,下面分別進(jìn)行介紹。
(1)工程組快捷菜單(The Project Group Context Menu)
用鼠標(biāo)右鍵點(diǎn)擊位于Project Manager樹頂點(diǎn)的工程組節(jié)點(diǎn),會(huì)顯示出工程組的快捷菜單。如下圖:
【Add New Project…】——打開對象庫,選擇一個(gè)新的應(yīng)用程序、DLLs、窗體、數(shù)據(jù)模塊、組件或?qū)ο髱熘械钠渌行ο蟆?
【Add Existing Project…】——打開一個(gè)存儲(chǔ)在磁盤上的工程文件,將它添加到工程組中。
【Save Project Group】——保存工程組。工程組的擴(kuò)展名為.bpg。
【Save Project Group As…】——用一個(gè)新工程組名保存工程組。
【View Project Group Source】——顯示工程組源文件。工程組源文件是一個(gè)特殊文件(a makefile),它包含工程組內(nèi)所有工程的引用。
【ToolBar】——打開或關(guān)閉Project Manager的工具欄。
【Status Bar】——打開或關(guān)閉Project Manager的狀態(tài)欄。
【Dockable】——指明Project Manager是否可泊位。
Note
Project Manager 中每個(gè)快捷菜單都含有ToolBar、Status Bar和Dockable菜單項(xiàng)。下面講解其他Project Manager快捷菜單時(shí)不再重復(fù)介紹。
(2)工程快捷菜單(The Project Context Menu)
用鼠標(biāo)右鍵點(diǎn)擊Project Manager中的工程節(jié)點(diǎn),就會(huì)顯示出工程快捷菜單。如下圖:
【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】——是工程變成活動(dòng)工程。
【Compile】——編譯工程。
【Build】——建立(編譯并連接)工程。
【View Source】——顯示工程源文件(DPR文件)。也可從主菜單選擇【Project | View Source】來顯示工程源文件。
【Close】——關(guān)閉工程及全部文件。如果工程時(shí)一個(gè)已保存工程組的一部分,則該工程節(jié)點(diǎn)圖標(biāo)會(huì)變灰;它仍是工程組的一部分,但在IDE中不能打開。如果工程是缺省工程組的一部分,則關(guān)閉該工程并把它從缺省工作組中移出。
【Remove Project】——從工程組中刪除工程。注意,不是把工程從硬盤上刪除,只是將它移除工作組。也可點(diǎn)擊Project Manager工具欄中的“Remove”按鈕來將工程刪除出工作組。
【Build Sooner】——往工程樹的上部移動(dòng)工程。編譯鏈接工程時(shí)按自上而下的順序進(jìn)行的。
【Build Later】——往工程樹的下部移動(dòng)工程。
Note
Project Manager快捷菜單中的內(nèi)容比本節(jié)中介紹的還要多。如果是批處理文件工程或者程序包工程,則工程快捷菜單包含附加菜單項(xiàng)。由于差別不大,就不專門介紹這些附加菜單項(xiàng)。
(3)單元快捷菜單(The Unit Context Menu)
用鼠標(biāo)右鍵點(diǎn)擊Project Manager中的單元節(jié)點(diǎn)時(shí),會(huì)顯出單元快捷菜單。如下圖:
【Open】——在Code Editor中顯示單元(對于獨(dú)立的單元),或在Form Designer中顯示窗體(如果單元有相關(guān)聯(lián)的窗體)。
【Remove From Project】——把單元從工程中刪除。刪除時(shí)Project Manager不會(huì)給出提示,因而不能撤銷刪除。如果不小心錯(cuò)刪了一個(gè)單元,再把它加到工程中就行了。
【Save】——保存單元。也可從Delphi主菜單中選擇【File | Save】保存。
【Save As…】——打開Save As…對話框,用新單元名保存該單元,也可從Delphi主菜單中選擇【File | Save As…】來完成同樣的操作。
(4)文件快捷菜單(The File Context Menu)
用鼠標(biāo)右鍵點(diǎn)擊除工程組節(jié)點(diǎn)、工程節(jié)點(diǎn)、單元節(jié)點(diǎn)外的節(jié)點(diǎn)(通常是.pas或.dfm文件)時(shí),會(huì)顯示文件快捷菜單。如下圖:
這個(gè)快捷菜單只有一個(gè)菜單項(xiàng),【Open】菜單項(xiàng)把選擇的節(jié)點(diǎn)顯示在Code Editor或Form Designer中(由所選節(jié)點(diǎn)的類型決定是顯示在Code Editor中還是Form Designer中)。
2、Project Manager工具欄和鍵盤命令(The Project Manager Toolbar and Keyboard Commands)
除了Project Manager快捷菜單外,Project Manager有一個(gè)工具欄,使用這個(gè)工具欄可方便工程管理器的操作。Project Manager工具欄包含三個(gè)按鈕:
Add New Project按鈕。該按鈕顯示Object Repository對象庫,從而可增加新工程到工程組中。也可點(diǎn)擊工程組快捷菜單的【Add New Project】菜單項(xiàng)來增加新工程到工程組中。
Remove按鈕。該按鈕把所選工程、單元、文件等從工程組中刪除。
Active按鈕。該按鈕把所選目標(biāo)激活成活動(dòng)工程。
鍵盤命令包括Delete鍵和Insert鍵。當(dāng)按下Delete鍵,所選節(jié)點(diǎn)就會(huì)被刪除。若選的是工程節(jié)點(diǎn),則把該工程從工程組中刪除;若選的是單元節(jié)點(diǎn),則把單元從所屬工程中刪除。Insert鍵的功能與工程快捷菜單【Add to Project】功能一樣。
Tip
Project Manager工具欄按鈕有大小兩種尺寸。拖動(dòng)工具欄底部可改變工具欄按鈕的大小,往上拖顯示小按鈕;往下拖顯示大按鈕。如圖:
創(chuàng)建并使用工程組(Creating and Using Project Groups)
對于復(fù)雜工程,使用工程組時(shí)大有益處的,但是使用工程組不是強(qiáng)制的,沒有必要每個(gè)工程都使用工程組。Project Manager有一個(gè)名為ProjectGroup1的缺省工程組,當(dāng)不專門打開或創(chuàng)建工程組時(shí),可使用這個(gè)工程組。不妨按以下步驟試試:
(1)選擇【File | Close All】菜單項(xiàng)關(guān)閉所有打開的工程或工程組。
(2)選擇【File | New Application】創(chuàng)建一個(gè)新應(yīng)用程序。
(3)選擇【View | Project Manager】來顯示Project Manager。如下圖:
ProjectGroup1工程組時(shí)一個(gè)臨時(shí)工程組。當(dāng)從主菜單選擇【File | Save All】菜單項(xiàng)時(shí),系統(tǒng)會(huì)提示保存工程,而不是保存保存工程組。若要保存該工程組,必須在Project Manager的工程組快捷菜單中使用【Save Project Group】或【Save Project Group As…】菜單項(xiàng)來保存它。
1、增加單元(Adding Units)
要增加一個(gè)已存在的單元到工程中,只需要點(diǎn)擊Project Manager工具欄上的Add按鈕,或從Project Manager工程快捷菜單中選擇【Add…】。
如果工程中有一個(gè)窗體的與一個(gè)單元同名,則不能把這個(gè)單元加到該工程中。
2、刪除單元(Removing Units)
使用Remove From Project選項(xiàng)可將文件從工程中刪除。另外,也可選擇要?jiǎng)h除的單元,然后按鍵盤上Delete鍵。從工程中刪除掉的文件并未從硬盤上刪除,而只是將它們移除工程編譯/鏈接過程。
Note
從工程中刪除單元時(shí)要多加小心,不要把工程中其他單元引用的單元?jiǎng)h除了。如果刪除了工程要用的單元,會(huì)導(dǎo)致編譯出錯(cuò)。在刪除一個(gè)單元之前,一定要搞清楚工程是否還要使用該單元。如果不小心刪除了工程還需要的單元,可用【Add to Project】選項(xiàng)將它加回到工程中。
點(diǎn)擊工程快捷菜單中的【Remove File…】,將會(huì)顯示出“Remove From Project”對話框,該對話框允許選擇多個(gè)單元,因此可以同時(shí)刪除多個(gè)單元文件。如下圖:
3、查看單元或窗體(Viewing Units or Forms)
要查看單元、窗體或其他文件,只需雙擊想要查看的窗體或單元節(jié)點(diǎn)。還可以從Project Manager快捷菜單中選擇【Open】菜單項(xiàng),窗體或單元就會(huì)顯示在Form Designer或Code Editor中(根據(jù)所選節(jié)點(diǎn)的類型)。
建立工程或工程組(Building Projects or Project Groups)
要編譯、鏈接某個(gè)工程,可按下列方法之一進(jìn)行:
用鼠標(biāo)右鍵點(diǎn)擊Project Manager中的工程機(jī)電,再從快捷菜單中選【Build】菜單項(xiàng)。
從Delphi主菜單選擇【Project | Build <工程名>】。這個(gè)菜單項(xiàng)的名稱隨著當(dāng)前活動(dòng)的工程的工程名自動(dòng)變化。
按鍵盤上的Ctrl + F9來編譯當(dāng)前活動(dòng)工程。
要編譯、鏈接整個(gè)工程組,從Delphi主菜單中選擇【Project | Build All Projects】,工程組的全部工程都會(huì)被編譯、鏈接,順序是自上而下從工程組的第一個(gè)工程到最后一個(gè)工程。