對象庫(Object Repository)是一種手段,通過這種手段,用戶可以選擇預定義的對象,並運用到自己的應用程序中,用對象庫能做以下的工作:
- 選擇一個預定義的應用程序、窗體或對話框,用於用戶的應用程序中。
- 將用戶自己的窗體、對話框及應用程序加入到對象庫中。
- 增加其他對象到用戶的應用程序,如添加ASCII文本文件和附加的源代碼單元。
- 管理數據模塊(data modules)
- 創建組件(Components)
- 創建新程序包(packages)
- 創建新的ActiveX控件或ActiveForms。
- 調用向導來幫助用戶建立一個對話框或應用程序。
以上只是選擇性的介紹,出了上面的列出的對象外,還可以創建其他對象。
1、對象庫頁面和選項(Object Repository Pages and Options )
只要從主菜單選取【File | New】項,對象庫就會自動顯示出來,如下圖給出了不打開工程時出現的對象庫窗口:
Note
初看起來可能有點陌生,對象庫的標題是“New Items”,對象庫配置對話框的標題是“Object Repository”,但是這個“New Items”就是對象庫窗口。
對象庫有若干的選項頁,每個頁面包含不同的對象,從上圖可以看出,最初選擇的是New頁面,下面列出了對象庫各個頁面的簡單描述。
對象庫頁面
- New——使用戶能創建一個新應用程序、窗體或單元用於用戶的應用程序。還能創建高級對象,如程序包(packages)、DLLs、組件、NT服務器應用程序、Web服務器應用程序和數據模塊。
- ActiveX——使用戶創建新的ActiveX控件、類型庫(type libraries)、COM對象、ActiveForms和其他的ActiveX對象。
- Multitier——使用戶能創建CORBA和MTS對象,以及數據模塊(僅適用於客戶/服務器版)。
- Forms——使用戶能用預建窗體(如About窗口、雙列表窗口、帶標簽頁等)創建標准窗體。
- Dialogs——給出若干種基本的對話框類型供用戶選擇,還包括了Dialog Wizard。
- Projects——列出全部可供選擇的工程,用戶可以從中選取一個來建立應用程序,其中還包含應用程序向導。
- Data Modules——使用戶能選擇應用程序中的數據模塊。
- WebServices——使用戶能創建SOAP服務器應用程序,數據模塊等。
- Web Documents——使用戶創建標准的HTML、XSL、WML、XHTML等網頁文本。
Note
如果用戶在已打開工程的情況下調用“Object Repository”,會看到一個附加標簽頁,標簽頁的名稱為當前工程的名稱。點擊這個標簽頁會顯示一個頁面,其中包括了該工程當前的全部對象。用戶只需要從Object Repository中簡單的選取,就能快速的重新使用窗體或其他對象。如下圖:
Note
對象庫(Object Repository)有時也被稱為Gallery(陳列室)。
在每個頁面底部都有三個單選按鈕,分別標着Copy、Inherit和Use,它們確定被選擇對象的實現方式。根據被選對象,某些單選按鈕可能會變灰(失效)。例如,在顯示New頁面時,三個按鈕都變灰。這是因為在New頁面上Copy是唯一的可用選項,因此Delphi把全部按鈕變灰,並自動使用Copy選項。
(1)Copy按鈕
當用戶選中Copy按鈕時,Delphi創建被選對象的一個拷貝並把它放到用戶的應用程序中,這時用戶可以自由修改這個拷貝對象,並且在用戶修改應用程序中的這個對象時,Repository中的原始對象不會跟着改變。
為了更直觀的理解,可以打個比方:有一張表格(比如說是一張工作日程表),想填上日程安排內容,但不能直接在原表上填寫(如果在原表中填寫,這張表就不能重復用了),而是應該拿原表去復印一份,並把原表保存好以備以后再用。
可以在復印的表格上填寫。對象庫中對象的拷貝正是這個道理。用戶可以自由修改拷貝,原件不會改變。制作拷貝是使用對象的最安全辦法。
(2)Inherit按鈕
Inherit類似於Copy,但二者的最大區別是:Inherit新建對象還連接着原對象,如果修改庫中原對象,新建對象會跟着作相同改變。反過來則不成立。用戶可以修改新對象,而原對象不會改變。
為了理解這種類型的對象用法,再次打個比方:信息管理人員經常用電子表格程序創建電子表格數據表,並在字處理程序中使用該電子數據表制作報表。在從剪貼板粘貼或導入電子數據表到字處理程序時,他們通常有選擇地鏈接數據到電子數據表。這樣,當修改電子數據表時,字處理文檔會跟着變化。
同樣地,改變原窗體,所有的繼承窗體都跟着改變。當多個窗體由一個公用窗體派生,且這個公用窗體某些地方要做修改時,可用Inherit選項。對原窗體的任何修改都將反映到繼承窗體上。
(3)Use按鈕
Use選項不是通用的。當用戶使用USE一個對象時,也就是直接打開該對象進行編輯。當用戶在對象庫中存放了一個對象,並且要對該對象做永久性的修改時,選擇本選項。在“Inherit按鈕”中說過,對原窗體的修改會反映到所有繼承窗體上。如果要改變一個原窗體,可以用Use選項打開它。
(4)使用對象庫(Using the Object Repository)
當用戶從Object Repository中選取一個對象時會發生什么情況?這取決於多個因素。其中包括所選對象的類型,當前是否打開了工程,以及用戶選擇的使用類型(Copy、Inherit或Use)。
如果用戶打開了一個應用程序,同時要從Object Repository中選擇創建一個新的應用程序,在顯示新工程之前,系統會提示用戶保存當前工程。
Tip
從主菜單上選擇【File | New | Application】菜單項,是開始一個新應用程序的簡捷方法。它等同於從主菜單上選擇New菜單項,再從Object Repository中選擇Application對象。類似地,主菜單上的New Form項是開始一個新窗體的簡捷方法。
在用Object Repository創建新窗體時,打開與不打開工程,創建的方式是不同的。如果打開工程,新窗體作為一個窗體和相應的窗體單元加入到應用程序中;如果不打開工程,則新窗體和窗體單元被創建成獨立的窗體。創建一個工程之外的窗體必須加到工程中才能在運行階段使用。當要創建加入到對象庫的新基礎窗體時,使用本選項。
如果用戶選擇創建一個新單元或文本文件,則用Code Editor來創建新文件很簡便(若是新單元,將其加入到當前工程即可)。創建一個新文本文件的理由有多種,比如說,用戶要在應用程序中加入一個配置文件(INI文件),用戶可在Object Repository中創建一個新文本文件來初步創建該配置文件。無論何時創建新單元,用戶都要為用戶的應用程序啟動一個新的源文件,並且該源文件與窗體無關(比如包含文件)。
選擇一個新的DLL,會導致創建一個新工程,該工程用作DLL。創建一個新組建或線程對象時,會填出一個對話框,詢問有關要創建對象的詳細信息。
(5)對象庫查看窗(The Object Repository Views)
實際上對象庫窗口是一個Win32的列表查看控件(listview control),它類似於Windows資源管理器的右半部分。有多種查看視圖供用戶選擇:Large Icons、Small Icons、List、Details。缺省時查看視圖為Large Icons。要改變查看對象庫的視圖,右鍵點擊Object Repository,並從中選擇所要的視圖樣式即可,如下圖所示:
Object Repository快捷菜單中還給出了不同的排列方式,可以按名稱、描述、日期或作者進行排列。
2、利用對象庫創建新對象(Creating New Objects from the Object Repository)
毫無疑問,對象庫的最基本用途是:用庫中對象創建新的對象。為了更好地理解,按下述步驟來創建一個簡單的應用程序,它有一個主窗體、一個About對話框和一個次窗體。
(1)關閉所有的工程,從主菜單中選取【File | New】,在Object Repository選取Application,新應用程序創建后顯示一個空白窗體。
(2)將兩個按鈕放置到窗體中,將其中一個按鈕的Caption屬性設置為“About”,另一個按鈕的Caption屬性設置為“Display Form2”,如果需要,亦可以改動每個按鈕的Name屬性。如下圖:
(3)從主菜單選擇【File | New】,再次顯示Object Repository,點擊Forms標簽,選擇“About Box”對象,保證Copy單選按鈕選中,如下圖。點擊OK創建一個新的About窗體,很快顯示出About窗體,按需要進行修改(例如輸入用戶自己的信息、改變圖標、窗體大小、位置等)。
About窗口如下:
(4)從主菜單選擇【File | New】,第三次顯示出Object Repository,點擊Forms標簽,選取“Dual list box”對象,點擊OK。Dual list box窗口如下:
(5)按要求編寫兩個按鈕的事件處理程序(一個按鈕顯示About窗體,另一個顯示Dual list box窗體)。別忘記把About窗體和Dual list box窗體的單元加到主窗體的uses中。代碼如下:
uses UAboutBox, UDualListDlg; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin AboutBox.ShowModal; end; procedure TForm1.Button2Click(Sender: TObject); begin DualListDlg.ShowModal; end;
(6)編譯運行並測試程序。
這個程序並沒有做任何事情,它向大家說明了如何用Object Repository來快速地開發應用程序原型。
上面代碼均在Delphi7中測試通過,示例代碼下載:利用對象庫創建新對象.rar
3、向對象庫增加對象(Adding Objects to the Object Repository)
如果不能往Object Repository中增加用戶自己的獨享,就顯示不出Object Repository的效果。可以往Object Repository中加入自己的對象,並且也應該這么做。把常用對象加到Object Repository中可提高工作效率,因而成為更有價值的程序設計員。
當用戶創建應用程序、窗體或其他對象后,將它存入對象庫,以后需要時可以再用。當然,沒有必要把創建的每個窗體都存入對象庫,把經常使用的存入對象庫即可。
可以在正常開發應用程序的過程中向對象庫增加對象,也可以專為向對象庫加入對象而創建對象。比如說,在開發應用程序的過程中創建一個About對話框,用戶突然覺得要把這個About對話框保存起來以備用到所有程序中,畢竟它包含所有的公司名稱、標識和全部的版權信息,沒有必要為每個應用程序去重建相同的About對話框。要做到這一點很簡單,把它加到對象庫中即可。
要將一個窗體加到對象庫中,首先保存它。然后用鼠標右鍵點擊窗體的任何部位,從Form Designer快捷菜單選取Add To Repository菜單項,彈出如下的對話框:
Add To Repository對話框左側Forms列表框列出應用程序中當前窗體和其他對象(如數據模塊)。首先,選取要加到Object Repository中的窗體。
Note
Form Designer中的當前窗體已經被選到Add To Repository對話框中的Forms列表框中。
現在輸入對象的名稱(Title),這個名稱會顯示在Object Repository中對象圖標的下方。在Description編輯框中輸入該對象的描述信息。當Object Repository中查看視圖為Details時,會顯示該信息。Author中輸入對象編寫的作者。
Note
Delphi對象庫中大多數預建對象的作者姓名是“Borland”。
Page編輯框中選擇存放對象的Object Repository頁面。可以從已存在的頁面中選一個,也可以在Page編輯框中輸入一個新頁面。如果輸入的頁面名不存在,Delphi將創建一個新頁面。對話框下面的Browser按鈕,可以為新增對象選一個圖標。
填寫完所有字段后並選擇了圖標,點擊OK把該對象加到對象庫中。從上述過程可以看出,往對象庫中增加對象與使用對象一樣容易。
Caution
當往對象庫中增加一個對象時,Delphi在對象庫文件中增加一個條目來描述該對象。其中包括對象的窗體和源文件所在目錄的路徑名。如果移動或刪除一個對象的窗體或源文件的話,就不能再從對象庫中使用該對象。
4、向對象庫增加工程(Adding Projects to the Object Repository)
向對象庫增加工程與向對象庫中增加單個窗體沒有太大的差別。要向對象庫增加工程,從主菜單選擇【Project | Add To Repository】菜單項,彈出Add ToRepository對話框(該對話框與向對象庫增加對象時的對話框相似,只是沒有了Forms列表框);輸入要求的信息(名稱、描述、作者等等),點擊OK就可將工程加入到對象庫中。如下圖:
在熟悉了Delphi之后,應該創建這樣一個應用程序外殼,它包含了應用程序最常用的特性。每次開始創建標准應用程序時,從對象庫中拷貝一份該應用程序外殼。可以把菜單、工具欄、About對話框及其他標准對話框都事先在應用程序外殼中創建好,以后使用起來就很方便。應用程序創建完后,可進行修改,如增加窗體,刪除不想要的窗體等等。
5、對象庫的內務處理(Object Repository Housekeeping)
對象庫中頁面和對象的管理是通過使用對象庫配置對話框來進行的。
要產看對象庫配置對話框,可從主菜單選擇【Tools | Repository】菜單項,或者從對象庫的快捷菜單選“Properties”菜單項打開,如下圖:
通過這個對話框,可刪除對象庫中的對象和頁面,把對象從一個頁面移到另一個頁面,改變對象庫中頁面的順序等等。對話框左側標有Pages列表框列出了對象庫中的頁面;對話框右側的Objects列表框列出了當前頁面所包含的對象。
Note
Pages列表框有兩條特別要注意,首先,New頁面(當調用對象庫時它總是顯示在頭一個位置)不在列表框中(ActiveX和Multitier頁面也不在Pages列表框中)。New頁面是固定的,不能作任何改動。還要注意Pages列表框中有一個[Object Repository]項,此項實際是對象庫中所有頁面上的所有項目的列表。
(1)對象管理(Managing Objects)
必須先選取對象,才能標記、刪除或移動對象。選取對象時,單擊Objects列表框中的對象。選取對象后,單擊“Edit Object…”按鈕來編輯對象。編輯對象時,可以改變對象的名稱、描述、作者信息及對象所在頁面。如下圖彈出“Edit Object Info”對話框。
Tip
要快速編輯一個對象,可雙擊Objects列表框中的對象。
可通過選取對象並單擊“Delete Object”按鈕來刪除對象。在對象刪除之前,系統會提示“是否要刪除對象”,得到確認后才真正刪除。如下圖:
Note
從對象庫中刪除對象,是將對象從Object Repository文件中刪除,不再出現在對象庫的任何頁面上。但是,對象的窗體文件和源文件並未從磁盤中刪除。
要將對象從給一個頁面移到另一個頁面,只需用鼠標把對象從對象列表框拖動到頁面列表框中某個頁面位置處放下。
(2)頁面管理(Managing Pages)
通過對象庫配置對話框,也可以增加、刪除或移動對象庫頁面。刪除一個頁面先要將該頁面上的所有對象刪除,然后點擊頁面列表框中該頁面名並點擊“Delete Page”按鈕,Delphi先檢查該頁面是不是空頁面,若是空頁面,Delphi將從對象庫中刪除。
點擊“Add Page”按鈕可向對象庫增加新頁面。此時會彈出一個對話框,要求輸入新頁面名稱;輸入頁面名后點擊OK,新增頁面就會出現在頁面列表框中。如下圖:
頁面更名與此相似。選取一個頁面,點擊“Rename Page”按鈕,彈出一個對話框提示輸入新的頁面名。如下圖:
頁面在對象庫內的順序是可以改變的,要改變一個頁面的次序,點擊該頁面名使其變亮,然后點擊頁面列表框下方的上箭頭或下箭頭按鈕,將頁面往上移或往下移。也可以用鼠標將頁面拖到新位置。
(3)設置缺省窗體和工程(Setting Default Forms and Projects)
通過對象庫配置對話框,可以設置下列三個缺省對象:
- 從主菜單選擇【File | New | Form】菜單項時使用的缺省窗體
- 從主菜單選擇【File | New | Application】菜單項時用作主窗體的缺省窗體。
- 從主菜單選擇【File | New | Application】菜單項時使用的缺省工程。
對象列表框下方根據所選對象出現不同的復選框。如果選擇窗體,則出現New Form和Main Form復選框;如果選擇工程,則出現New Project復選框,如下圖:
把一個窗體或工程設置為缺省很簡單。例如,要把一個主窗體設置為新建應用程序的缺省主窗體,可以從對象列表框中選取該窗體,選中“Main Form”復選框,點擊OK。從此以后,這個主窗體就成為了缺省主窗體。類似地,要把一個工程設置為缺省工程,先在對象庫配置對話框中找到該工程,點擊它,然后選中“New Project”復選框,點擊OK即可。從此以后,只要從主菜單選擇【File | New | Application】,設置為缺省的工程就會顯示出來。
Note
如果不小心將一個窗體設置成了新建應用程序的缺省窗體,可檢查對象庫配置對話框中每一個窗體,其中必有一個窗體使“Main Form”復選框處於選中狀態,此時將其變為不選狀態,一切都會恢復正常。這些也適用於缺省工程。檢查Projects頁面,查出使得“New Project”復選框選中的工程。