Delphi Project 之工程選項(Project Options)


工程選項是另一個容易忽視的特性。因為對於初學者,缺省設置就足夠用了。畢竟,當一個人忙於學習一個新編程環境時,哪有時間去關心那些編譯器/鏈接器選項呢?但是,到一定時候,就會開始對這些選項感興趣,並想知道它們是作什么用的。

0262

下面將講述工程選項對話框。可從主菜單選擇【Project | Options】來調用該對話框。工程選項對話框是一個多頁面對話框,它有如下頁面:

 

  • Forms
  • Application
  • Compiler
  • Compiler Messages
  • Linker
  • Directories/Conditionals
  • Version Info
  • Packages

Note

Project Options對話框每個頁面的底部都有一個Default復選框。如果要把當前設置當做新建工程的缺省設置,就要選中“Default”復選框,點擊OK,即可將當前設置變成新的缺省設置。

窗體頁面(The Forms Page)

Project Options對話框的Forms頁面用於控制應用程序處理窗體的方式。如下圖:

0263

Forms頁面的頂部是“Main from”選擇框,此處選擇應用程序的主窗體;如果缺省,則把第一個創建的窗體作為主窗體;如果修改了工程,希望另一個窗體稱為主窗體,則必須修改這一設置,使新窗體成為應用程序的主窗體。

該對話框的中部是兩個列表框,左邊的列表框標有“Auto-create forms”,右邊標有“Available forms”,在詳細介紹這兩個列表的用法前,先介紹下窗體的自動創建(Auto-create)。

New Term

自動創建(Auto-create)是指在應用程序啟動過程中Delphi創建窗體。

每次創建窗體時,Delphi把所建窗體放到應用程序的自動創建列表中。自動創建窗體比非自動創建窗體顯示得快。自動創建窗體的缺點之一是應用程序要占用更大的內存;另一個缺點是當應用程序中有很多自動創建窗體時,裝入這個應用程序的時間會增加。

Note

Auto-create forms列表中的第一個窗體總是主窗體。如果要更換主窗體,則新換主窗體會移到Auto-create forms列表框頂部。設定主窗體的另一個方法是將Auto-create forms列表框中任一窗體拖放到列表框的頂部。

自動創建的好處是:顯示自動創建窗體很方便,只需調用該窗體的Show或ShowModal函數:

AboutBox.ShowModal;

如果不讓Delphi自動創建窗體,我們必須要在使用窗體前負責創建它:

procedure TForm1.Button1Click(Sender: TObject);
var
  About: TAboutBox;
begin
  About := TAboutBox.Create(Application);
  About.ShowModal;
  About.Free;
end;

這個例子未使用Delphi生成的、指向About框的指針,它創建一個局部指針,顯示該窗體,並且當不再需要改窗體時就立刻刪除指針。正如Object Pascal編程一樣,可采用多種方式來完成這一任務。由於Delphi總要創建指向窗體對象的指針,因此可如下編寫前面的代碼:

if not Assigned(AboutBox) then
  AboutBox := TAboutBox.Create(Self);
AboutBox.ShowModal;

上面的代碼檢查窗體是否已經創建,如果沒有創建,則創建窗體並調用ShowModal方法。采用何種方法創建窗體由編程人員自己決定,但本人更喜歡前一種方法,因為它所做的任何處理都是在局部進行的。

Note

每當在Form Designer中創建窗體時,Delphi會創建一個指向所建窗體的指針。如果讓Delphi自動創建窗體,編程人員就不必去考慮該指針是否有效。如果不選擇自動創建窗體,則指向窗體的指針為空,直至顯式地創建該窗體並初始化指針。如果在初始化指針之前使用指針,Windows會產生一個錯誤。

好了,再把注意力集中到Project Options對話框上來。Auto-create forms列表框中列出的是將要自動創建的窗體。如果不希望自動創建某個窗體,可把它從Auto-create forms列表框拖到Available forms列表框中。要一次移動多個窗體,可先選擇要移動的多個窗體,然后一起拖放這些窗體。

Note

可使用位於兩個列表框之間的按鈕來把窗體從一個列表框移到另一個列表框,但是,使用鼠標拖放更方便。

應用程序頁面(The Application Page)

Project Options對話框的Application頁面非常簡單。如下圖:

image

Title字段用於設定應用程序的標題,當應用程序最小化后,它會出現在Windows任務欄上。

Note

應用程序的標題和主窗體的標題是完全不同的兩個概念。如果希望在程序最小化后顯示程序名,則必須在Project  Options對話框中設置應用程序標題。如果不提供應用程序標題,則使用工程文件名作為缺省標題。

Application頁面上的Help file字段用於設置應用程序使用的幫助文件。在應用程序運行期間按下F1鍵,該應用程序就會裝入這個幫助文件。如果不記得幫助文件的文件名或所在目錄,可使用Browser按鈕來查找。若不提供幫助文件,則在應用程序運行時,按下F1鍵就不會有任何作用。

Icon選項用來為應用程序選擇圖標。當應用程序運行時以及被最小化時,這個圖標就會顯示在Windows任務欄中。此外,這個圖標還會顯示在主窗體的標題欄上,除非顯式地設置一個主窗體圖標。

Target file extension字段用於指定當工程被編譯鏈接時該工程的文件擴展名。例如,要創建一個屏幕保護程序,則可以將該字段設置為scr,這樣,所創建的屏幕保護程序就帶有src擴展名了。Control Panel控制面板程序又是一個例子,是以.cpl擴展名保存的。對於普通工程,不必為此字段設置。

編譯器頁面(The Compiler Page)

Project Options對話框的Compiler頁面用於設定編譯器編譯工程時使用的選項。如下圖:

image

Compiler頁面有四個部分,下面分別來介紹:

1、代碼生成(Code Generation)

可配置編譯器來執行代碼優化。如果不選中“Optimization”復選框,則編譯器不優化代碼;若選中“Optimization”復選框,則編譯器就會生成速度最快的代碼,而不考慮代碼大小。在大多數情況下應使用該選項的缺省設置;但有些時候最好是關閉此選項(如在調試應用程序期間)。

“Record field alignment”選項用於控制記錄在內存中對齊的方式。默認設置為8字節邊界對齊。

調試程序時應選中“Stack Frames”選項,調試結束后可將它關閉。當“Stack Frames”選項關閉時,編譯器生成的代碼體積更小,速度更快,但編譯時間要稍長一些。

選中“Pentium-Safe FDIV”選項,可使編譯器生成檢測故障浮點除法指令的代碼。

2、語法選項與運行階段錯誤(Syntax Options and Runtime Errors)

這兩個區域中的選項對編譯器生成工程代碼有影響。Delphi提供的幫助文件中解釋了其中的每一個選項,此處就不再重復了。要顯示有關編譯器選項的幫助內容,點擊“Compiler”頁面上的Help按鈕或按鍵盤上的F1鍵。

3、調試(Debugging)

Project Options對話框的“Compiler”頁面的“Debugging”中的選項控制編譯器為調試會話聲場代碼的方式。當選中“Debug information”時,Delphi為工程生成調試信息。如果不生成調試信息,則在調試期間程序不能在斷點和檢查變量處停住。要調試程序,必須要讓Delphi生成調試信息,除此之外,別無他法。

Note

如果改變了Compiler頁面上的選項,應立即進行一次編譯、鏈接,這樣可保證所有的單元都是用相同的編譯器設置進行編譯、鏈接的。

編譯提示與警告(Compiler Messages)

image

該區域中選項用於確定要不要在編譯器在編譯后報告提示和警告。建議將“Show hints”和“Show warnings”兩個選項都選上。不應該忽視提示和警告。

通常,編譯器報告的警告性錯誤可以排除也應該排除,要學會把提示和警告當作錯誤來對待,高質量的代碼編譯時是不會有警告信息的。

鏈接器頁面(The Linker Page)

此頁面上的選項用戶指定鏈接器的操作方式。如果不是對Delphi特別熟悉,最好不要自己去設置這些選項,接受這些選項的缺省值設置即可。如下圖:

image

1、Map File(映像文件)

“Map File”區中的選項用於控制:是否生成映像文件,以及映像文件包含多少細節內容。

映像文件是一種高級調試工具,在深入學習Delphi之前,很可能不會去用它。因此在此處不對“Map File”選項作詳細介紹。

2、EXE and DLL Options

該選項確定Delphi為應用程序工程生成何種類型的可執行文件。當選中“Generate console application”復選框,Delphi生成一個與GUI應用程序相對的控制台應用程序。

“Include TD32 debug info”選項使鏈接器把調試信息鏈接到EXE或DLL中。(TD32是指過去的Turbo Debugger的32位版本,TD32是一個高級調試器,Borland C++產品和Delphi的某些版本都帶這個調試器)。有些調試工具使用TD32格式的調試信息。當要使用這些TD32格式的調試信息的調試工具時,要選中這個選項。

“Include remote debug symbols”選項生成“remote debugging of Web broker applications”所需的調試符號。

3、Linker Output(鏈接器輸出)

“Linker Output”中的選項確定鏈接器生成何種類型的編譯后二進制文件。通常,鏈接器生成DCU文件(Delphi的缺省類型)。但是,有時可能希望生成C或C++目標文件(OBJs),而不是DCUs;從而使Pascal單元可用在Borland C++ Builder建立的C或C++程序中。

4、Memory Sizes

普通用戶可將“Memory Sizes”中的選項忽略。其缺省值對所有應用程序都是適用的。在某些情況下,比如建立DLL時,可能需要修改Image基地址(Image base address),但需要這樣做的時候極少。

5、Description

“EXE Description”字段用於指定一個字符串,這個字符串將要嵌入到應用程序中。這個字段有時也用來將版權信息添加到EXE或DLL中。大多數時候是使用Version Info把版權信息存儲到一個文件中。而不是使用本頁上的“EXE Description”。在之后的“Version Info”頁面將要講解。

目錄/條件頁面(The Directories/Conditionals Page)

Project Options對話框的"Directories/Conditionals”頁面用於設置使用工程查找庫文件的目錄。如下:

image

1、Directories

本區域內的字段用於確定Delphi在編譯工程期間查找各種源文件的位置。在編譯、鏈接工程時,編譯器和鏈接器創建的文件存放何處也由其中的字段確定。

  • “Output directory”字段指定存放最終可執行文件或DLL的目錄。
  • “Unit output directory”字段確定存放被編譯單元的DCU文件的位置。
  • “Search path”字段用於指定附加庫(additional libraries)所在的目錄,編譯、鏈接工程時需要這些附加庫。
  • “Debug source path”字段用於指定需要調試而又不在當前工程目錄中的源單元路徑。例如,要調試一個DLL,就必須在本字段中輸入該DLL源代碼存放位置路徑。
  • “BPL output directory”和“DCP output directory”字段指定編譯、鏈接程序包時存放BPL文件和DCP文件的位置。

注意,“Directories/Conditionals”頁面上有些字段后面有一個帶有省略號“…”的按鈕,點擊按鈕會顯示一個編輯器,在編輯器中可以添加、刪除和調整排列順序。如下圖,為“Search path”字段的編輯器:

image

2、Conditionals

該字段,用於指定要在工程層(project level)增加的定義。舉個例子,工程中有段代碼,僅當符號TRIALRUN被定義時,才編譯它。此時把TRIALRUN添加到“Conditional Defines”中,如果要定義多個符號,用分號將符號分隔開。

3、Aliases

“Unit aliases”字段用於指定單元別名。例如,Delphi1中把Windows專用單元叫做WinTypes.pas和WinProcs.pas,而在Delphi2、3、4中把Windows專用單元叫做Windows.pas,用以代替WinTypes.pas和WinProcs.pas。"Unit aliases”字段使用別名WinTypes和WinProcs指向Windows單元。在這種情況下,Delphi1編寫的程序不需要修改uses列表就能在Delphi4中編譯了。

版本信息頁面(The Version Info Page)

“Version Info”頁面能設置應用程序的版本信息,版本信息存儲到程序的EXE文件、DLL或ActiveX文件中。在安裝程序中使用版本信息可以確定系統中安裝的文件是新的或舊的。

可以從Windows資源管理器中查看一個文件的版本信息;用鼠標右擊該文件,並從快捷菜單中選擇“屬性”,彈出屬性對話框。

“Project Options”對話框的“Version Info”頁面如下圖:

image

頁面的最頭是“Include version information in project”復選框,若選中這個復選框,則版本信息將包括到工程的可執行文件中。若不選中這個復選框,則工程不包括版本信息,並且頁面上的其他選項都失效。

“Version Info”頁面上的其余字段用於指定版本信息的各項內容。“Major version”、“Minor version”、“Release”和“Build”一起形成文件版本號。上圖中顯示的是Version 2.0,Build 0。若選中“Auto-increment build number”復選框,則每執行一次編譯、鏈接,build號都會自動加1。

“Module attributes”中的選項用於確定腰圍文件指定的專用屬性。

“Language”中選項用於為文件選擇本地標識(locale identifier)。有關“Locale ID”的各種取值,可以參看Windows API聯機幫助。

“Version Info”頁面底部的表格用於設定各種信息,這些信息包括公司名稱、文件描述、文件內部名、合法版權、產品名稱、產品版本及各種注釋。可以為這些字段中任何字段提供信息,也可以空着(FileVersion字段的設定要基於Module Version Number中的設置)。甚至可以向表格中添加用戶定制的版本信息字段。要添加定制版本信息字段,可點擊版本信息表格並用向下箭頭滾動到表格末尾,再按下向下箭頭,會彈出一個對話框請求輸入要添加的版本關鍵字,輸入版本關鍵字后,該版本關鍵字就被添加到工程的版本信息中。添加版本信息到工程,再沒有比這更簡單的了。

程序包頁面(The Packages Page)

Packages頁面用於確定工程要使用的鏈接類型。如下圖:

image

頁面上部的“Design packages”用於添加刪除設計程序包,但它實際上與當前工程毫無關系。與當前工程有關的選項只有“Build with runtime packages”復選框。

當選中“Build with runtime packages”復選框時,應用程序動態連接VCL和任何第三方組件,這意味着可執行文件會小些,但必須傳輸用到的程序包。若不選中復選框,應用程序使用靜態鏈接。靜態鏈接意味着應用程序用到的VCL代碼和第三方組件代碼都直接鏈接到可執行文件中。

以上代碼均在Delphi7中測試通過。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM