物件程式庫(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”複選框選中的工程。