第一章 Delphi快速入門(五)
1.4.3.1 調(diào)用標準對話框
您可以發(fā)現(xiàn),除了Font,Find,Replace對話框之外,其余標準對話框的Events頁都是空白的。因為它們本身是不可視的對話框形式,所以不能響應(yīng)標準的鼠標鍵盤操作,只能在程序中調(diào)用它們。在本章第一節(jié)的Demo程序中,我們已經(jīng)對用Color對話框有了了解,在程序的適當(dāng)位置加入對話框所屬的Execute方法,可以執(zhí)行標準對話框。
在編制應(yīng)用程序時,您可以先設(shè)計好主菜單。在需要使用標準對話框的菜單項的事件處理過程中,調(diào)用標準對話框的Execute等方法,以滿足設(shè)計需求,即響應(yīng)菜單命令彈出標準對話框?!?/font>
1.4.3.2 OpenDialog和SaveDialog部件
OpenDialog(文件的打開)和SaveDialog(保存對話框)部件處理文件的打開與存儲,它們擁有完全相同的屬性域。DefaultExt屬性表示缺省擴展名。當(dāng)用戶沒有輸入文件的后綴時,可以為用戶文件自動加擴展名。FileName屬性指定出現(xiàn)在FileName正文框中的缺省文件名。Filter屬性提供了文件過濾器。FileEditStyle決定在輸入文件名時用Edit還是Combo- Box;設(shè)置為fsComboBox時,允許使用歷史列表HistoryList屬性,這在應(yīng)用程序需要經(jīng)常選擇文件時,可以節(jié)約大量的時間。HistoryList屬性保存有在File Name下拉式編輯框中顯示的文件名,使用[TStrings]的省略按鈕可以編輯歷史列表。您也可以編程實現(xiàn)將HistoryList屬性設(shè)為以前用OpenDialog打開的文件名歷史列表。下列程序段可以實現(xiàn)自動歷史文件名加載:
if OpenDialog1.Execute then
OpenDialog1.HistoryList.Insert(0,OpenDialog1.FileName);
1.4.3.3 ColorDialog和FontDialog
顏色對話框ColorDialog我們在前文的例程中已經(jīng)用過,其更詳細的功能如Options的設(shè)定請查閱在線幫助。
字體對話框Font可以幫助用戶獲取各種方式的字體。使用OnApply事件,可以使得Font對話框中包含一個Apply按鈕,按動它,對話框中設(shè)定的字體會立即應(yīng)用到指定的對象中,而對話框仍然是打開的,這樣更便于觀察修改的結(jié)果。
以下的例程在窗體中先放置一個按鈕Button1,調(diào)用字體對話框來改變按鈕上的Caption屬性顯示的字體:
Procedure TForm1.Button1Click(Sender:TObject);
begin
FontDialog1.Execute;
end;
Procedure TForm1.FontDlgApply(Sender:Tobject);
begin
Button1.Font:= FontDialog1.Font;
end;
1.4.3.4 PrintDialog和PrintSetupDiaog
打印對話框PrintDialog和打印設(shè)置對話框PrintSetupDialog可以顯示標準打印、打印設(shè)置對話框,支持打印文件和打印設(shè)置功能,設(shè)置它的Options屬性可以規(guī)定對話框的表現(xiàn)形式
1.4.3.5 FindDialog和ReplaceDialog
FindDialog和ReplaceDialog提供了查找、替換兩個對話框部件,對于尋找和替換文本是極其有用的。在FindDialog和ReplaceDialog中都有OnFind事件,當(dāng)用戶單擊尋找對話框中的Find Next按鈕時將觸發(fā)這一事件。FindText屬性中保存了用戶在Find What編輯框中輸入的文本。在ReplaceDialog中還有OnReplace事件,當(dāng)用戶單擊替換對話框中的Replace和Replace All按鈕時,將觸發(fā)OnReplace事件。FindText和ReplaceText屬性分別保存了用戶在Find What和Replace With編輯框中輸入的文本?!?/font>
1.5 使用Delphi的工程管理、設(shè)計工具
Delphi 2.0是完備的工程設(shè)計系統(tǒng),除提供了大量的可視化編程部件和簡單方便的設(shè)計方法外,還備有功能強大的工程管理、窗口設(shè)計工具?!?/font>
1.5.1 創(chuàng)建多窗體工程項目
絕大多數(shù)的應(yīng)用程序都用到不只一個窗口,Delphi允許用戶創(chuàng)建多文檔界面(MDI)應(yīng)用程序。應(yīng)用自動創(chuàng)建窗體、窗體樣板、對話框?qū)<摇?yīng)用專家等,可以使得創(chuàng)建應(yīng)用程序更為方便快捷,而且可重復(fù)利用,大大地降低了工作量。
1.5.1.1 創(chuàng)建一個含有About框的例程
作為例子,我們先創(chuàng)建一個含主窗體和簡單的About框的應(yīng)用程序:
在Delphi中創(chuàng)建一個新工程,并為空窗口增加一個Button部件。我們把它作為主窗體,目的是當(dāng)按動按鈕部件時,調(diào)出About窗口。下面我們直接進行About窗口的創(chuàng)制。
選用主菜單的File|New項,在New頁中,選用Form樣板,Delphi會自動創(chuàng)建一個空窗體Form2。您可以在其上進行About框的設(shè)計,例如加入標簽以顯示各種信息、加入圖片幫助說明等。將Form2的BorderStyle屬性設(shè)置為bsDialog,則窗口成為運行時不能改變大小的對話框。
下面編程實現(xiàn)主窗體對About框的顯示控制。很可能在設(shè)計時,兩個窗體出現(xiàn)重疊,Form1被About遮住。用Shift+F12產(chǎn)生View Form對話框,可以選擇窗口的名字,調(diào)出所需的窗體Form1,雙擊其上的按鈕部件,在事件處理過程加入以下的程序:
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.Show;
end;
由于Form1窗體調(diào)用About窗體,所以必須在Form1的庫單元程序中對引用About進行說明。在Unit1的Uses后面加入About的庫單元名Unit2。運行程序,在主窗體上按動按鈕,可以出現(xiàn)About框。在框外單擊鼠標,會回到主窗體中。
在About窗體中加入一個按鈕,并將按鈕的ModalResult屬性設(shè)置為mrOK,同時將按鈕的標簽的Caption改為OK。這樣一個有模式的About框已經(jīng)建成了。將窗體Form1中Button1的OnClick處理過程的代碼改變?nèi)缦拢骸?/font>
Form2.ShowModal;
再運行程序,除了與上述功能相同顯示About對話框外,該程序只有當(dāng)用戶按動About框的按鈕或被About窗控制圖標關(guān)閉窗口后,才會回到主窗體中,而不能與第一個窗體發(fā)生交互行為。這就是方法Show和ShowModal的主要不同之處?!?/font>
1.5.1.2 指定自動創(chuàng)建窗體
上面我們簡單地生成了一個含About框的雙窗體應(yīng)用程序,運行時,應(yīng)用程序啟動時將自動創(chuàng)建第二個窗體。窗體保持隱蔽狀態(tài),但仍然占用Windows的資源。在大型應(yīng)用程序中,有時不希望在應(yīng)用程序加載時自動創(chuàng)建所有窗體。Delphi可以指定哪些窗體被自動創(chuàng)建。
選用Project|Options,Delphi顯示Project options對話框。如果Forms不是當(dāng)前頁,按動下標簽使之可見。如圖1.12所示:
圖示為Delphi裝載的TextEdit例程(...\Delphi 2.0\Demos\doc\TextEdit.dpr)。在MainForm正文框中輸入主窗體的名字。當(dāng)應(yīng)用程序啟動時,主窗體自動打開并獲取輸入焦點。對MDI應(yīng)用,主窗體的FormStyle屬性必須設(shè)置為fsMDIForm。在Auto-created Forms列表框中列出了在啟動時自動創(chuàng)建的窗體,缺省時工程文件的所有窗體都在此列中。
如果不需要自動創(chuàng)建窗體,使用箭頭按鈕把窗體移動到Available Forms列表框中。自動創(chuàng)建的窗體可以用Show方法進行顯示,而不自動創(chuàng)建時,必須編程實現(xiàn)窗體的顯示。在TextEdit工程中,定義一個TEditForm類型的變量EditForm,使用了以下的代碼顯示第二個窗體:
Begin
EditForm := TeditForm.Create(Self);
EditForm.Open(OpenFileDialog.Filename);
EditForm.Visible := True;
End;
也即,必須使用Create方法創(chuàng)建窗體,同時將窗體的Visible屬性設(shè)為真?!?/font>
1.5.2 使用工程管理器Project Manager
當(dāng)窗體的數(shù)目逐步增加時,跟蹤窗體以及與之相連的庫單元代碼就變得比較煩瑣。用Delphi提供的工程管理器Project Manager可以使得管理各種窗口更為方便。
1.5.2.1 工程文件的組成
工程(project)是整個應(yīng)用程序的源文件集合,這樣的文件一共有三種:
1.一個包含主程序部分的工程文件,用以驅(qū)動由Delphi創(chuàng)建的Windows程序,擴展名為.DPR。這是在用戶的工程被裝載時就運行的全局應(yīng)用程序文件,它的名字出現(xiàn)在Project Manager的標題條上。工程文件一般是Delphi自動創(chuàng)建的,用View|Project Source可以調(diào)出該工程的源文件,如果需要,可以對工程源文件進行編輯。
2.一個或多個窗體文件,它們含有相應(yīng)的庫單元文件。窗體文件的擴展名是.DFM。這些文件含裝在窗體上的控制部件。在Delphi中這樣的文件是在用戶設(shè)計界面的時候由Delphi自動生成的,而且不能編輯。在Delphi中,一個應(yīng)用程序至少需要一個窗體。
3. Object Pascal庫庫單元文件。 它們的擴展名為.PAS。窗體的庫單元文件包含了程序部分,用以控制窗體的行為。在一個工程中,還要包含附加庫和被應(yīng)用程序其它部分調(diào)用的支持子程序。uses子句中包含的標準庫單元文件包含了支持可視窗體及其控制的對象聲明。這些庫單元也包含了用于激活窗體的事件處理過程程序。
1.5.2.2 使用Project Manager進行工程管理
選用View|Project Manager,會調(diào)出Project Manager窗口。
Project Manager主體部分列出了庫單元以及相關(guān)聯(lián)的窗體的路徑,當(dāng)庫單元和工程在同一目錄下時,路徑不再顯示。Project Manager包含了應(yīng)用程序的所有源文件和窗口。并不是每一個庫單元都擁有一個相關(guān)聯(lián)的窗體。Project Manager可以作為工程的一個簡捷目錄。在列出的任何一個窗體或庫單元上雙擊鼠標左鍵,Delphi就會產(chǎn)生此對象的代碼編輯器。
Project Manager 窗口上有增加、刪除對象以及查看對象的加速按鈕。Options加速鍵能夠打開前文所述的Project Options對話框。如果在Project Manager打開時編輯了工程各文件的源代碼,可單擊Update加速條按鈕刷新對象列表?!?/font>
1.5.3 使用窗體樣板和對話框?qū)<摇?/font>
在前文的例程中,我們創(chuàng)建了一個簡單的About框。在很多應(yīng)用程序中,都會用到這種進行信息提示或表示版本信息的對話框。Delphi的設(shè)計思想是軟件可重用,所以系統(tǒng)phi已經(jīng)載入了一些用戶可重復(fù)應(yīng)用的窗體樣板。使用窗體樣板,可以簡單地生成各種對話框,節(jié)省了大量的重復(fù)工作。
1.5.3.1 使用窗體樣板創(chuàng)建窗體
創(chuàng)建一個新工程時,Delphi為用戶創(chuàng)建了一個新的空窗體。如果需要使用一個窗體樣板,向工程中增加一個窗體。選用File|New,Delphi即會顯示New Items對話框。在Forms頁上,從樣板庫中選擇中意的新窗體增加到工程中。例如,Delphi提供了About Box樣板。如果選擇它,About對話框就增加到工程中,用戶只需加入自己的各種信息即可,這樣就簡化了工作。同樣,要建立一個對話框窗口,在Dialogs頁上,選用所需的對話框樣板,可以簡便地建立起所需的對話框窗口。
1.5.3.2 存儲自己的窗體樣板
您可以在樣板庫中存儲自己的窗體樣板。首先創(chuàng)制一個窗體的樣本,在窗體區(qū)域中單擊鼠標的右鍵,可以調(diào)出窗體的加速菜單。選用Add To Repository...,將彈出對話框。
在Forms列表框中,選擇想要創(chuàng)建為樣板的窗體。在Title輸入框中輸入想要在樣本庫內(nèi)圖標下出現(xiàn)的文本。在Description區(qū),輸入關(guān)于樣板的詳細說明。這樣在瀏覽樣本庫時,在狀態(tài)行上會顯示這段文字以進行提示??梢赃x擇一個圖標作為新窗體樣板的圖標,按動Browse按鈕,選擇一個現(xiàn)有圖標來代表新的窗體樣板。否則將使用按鈕左方的缺省窗體圖標。按OK按鈕,Delphi會要求您確認將窗體存儲為樣板。
再次打開New Items對話框,您會發(fā)現(xiàn)您的窗體已經(jīng)被存儲成一個窗體樣板?!?/font>
1.5.3.3 使用對話框?qū)<?/font>Dialog Expert
對話框樣板呈現(xiàn)了友好界面的被保存對話框,而對話框?qū)<覅s能根據(jù)用戶提供的信息,智能地創(chuàng)建復(fù)雜的對話框。
選用File|New...,在New|Items的Dialog頁選用Dialogs Expert,Delphi將提示回答各種問題,以便于建立復(fù)雜的對話框。
1.5.4 使用工程樣板和應(yīng)用專家
Delphi的工程樣板提供預(yù)先設(shè)計的工程來作為應(yīng)用程序開發(fā)的起點。而應(yīng)用專家則允許用戶按照一定的模式來創(chuàng)建一個應(yīng)用程序。
1.5.4.1 使用工程樣板
當(dāng)您通過一個工程樣板來開始一個工程時,除了空白工程樣板外,都會被要求指定一個唯一的子目錄即工程目錄Project Directory,用來存儲新的工程。如果您指定一個不存在的目錄,Delphi會幫助您生成它。您可以通過加入新的窗體和程序庫單元來修改它,或不加修改地直接利用,而只是加入您的事件處理過程。無論您如何修改,您所作的修改只影響到打開的工程,原先的工程樣板不會受到影響,可再次被利用。
選用File|New,在New Items對話框中選用Projects頁,可以選擇將MDI、SDI、Windows 95 Logo等應(yīng)用程序作為缺省的工程類型,點動所需工程的圖標,使之高亮度顯示,然后按OK按鈕。如圖1.17所示。在接下來的Select Dictionary對話框中指定一個用來包含新的工程文件的目錄,則一個工程樣板的副本在指定的目錄中打開。
1.5.4.2 使用應(yīng)用專家Application Expert
一個應(yīng)用專家就是一個應(yīng)用程序,它會依照您在一系列對話框中所設(shè)置的選項值來產(chǎn)生一個工程。
如果您想在打開一個工程時,利用應(yīng)用專家來取代工程樣板而成為缺省值,則使用File|New,在New Items的Projects頁上選用Applcation Expert。這樣,雙擊它的圖標,會彈出一系列對話框提問,要求您選擇您的工程是否需要一個標準的Windows 95對話框、含有哪些菜單、加速條等。圖1.18是使用應(yīng)用專家后出現(xiàn)的第一個對話框。
Delphi 會要求您輸入您的工程文件名及它存儲的唯一目錄,并提示您選擇應(yīng)用程序是否使用MDI窗口、是否含有狀態(tài)行、提示等。選項設(shè)置完畢,按動Finish按鈕,Application Expert即按照您的要求,建立起一個可以直接運行的工程文件。