學習安裝組件的最好方法,就是自己編寫一個組件並安裝一遍,然后就真正明白其中的原理了。
本例,編寫了兩個BPL, dclSimpleEdit.bpl 與 SimpleLabel.bpl ,其中,dclSimpleEdit.bpl 依賴 SimpleLabel.bpl ,
或者說 dclSimpleEdit.bpl 需要 SimpleLabel.bpl 才能運行。這也是多數組件安裝問題之典型!
一、首先在delphi中打開 ComponentStudy 目錄中的 ComponetStudy.bpg ,此為工程組文件。


二、然后切換到 Project Manager (Ctrl + alt +F11 ) 窗口


三、在 dclSimpleEditD7.bpl 點右鍵菜單,選擇 Options...


按上圖設置這兩個目錄,Output directory 是 xxx.bpl 輸出目錄。Dcp output directory 是 xxx.dcp 輸出目錄。
如果不主動設置這兩個目錄,它們默認的目錄是:C:\Program Files (x86)\Borland\Delphi7\Projects\Bpl
[在PATH環境變量中,有此目錄信息,后面會說到它的作用]
對 dclSimpleEditD7.bpl 的輸出目錄,做同樣的上述設置(第三步之操作)。
四、在 SimpleLabel.bpl 上,點右鍵,選擇 Build ,即編譯。按同樣方式對 dclSimpleEdit.bpl 進行編譯。
因為dclSimpleEdit.bpl 引用了 SimpleLabel.bpl ,所以,要先編譯前者。對於組件的安裝,需要按順序編譯的原因就在於此。
五、在 dclSimpleEdit.bpl 點右鍵,選擇 install
(delphi一般規則是 dcl 開頭表示設計時包,設計時包就可以 install 到 delphi ide 中)
(運行時包,本例中的 SimpleLabel.bpl 則不能 install )


因為我們在第三步,修改了 BPL 的輸出目錄,所以,install 時就會出現此錯誤。(如果是默認目錄,不會有此錯誤)
當 install 的時候,delphi.exe 加載了 d:\wcp\ComponentStudy\TSimpleEdit\bpl\dclSimpleEdit.bpl 之后,
dclSimpleEdit.bpl 會立即加載 SimpeLabel.bpl ,因 BPL 與 DLL 相類似,同屬於動態動行庫,在動態運行庫代碼中,
不易獲得當前自己目錄(不是絕對不能,可以通過其它方法獲取到),所以 dclSimpleEdit.bpl 就會從系統 PATH 環境變量
中的目錄去查找 SimpleLabel.bpl ,如果找不到,則報錯。解決方法就是在 PATH 環境變量中加上
d:\wcp\ComponentStudy\TSimpleEdit\bpl\
六、以 Win7 64 位為例,演示如何設置 PATH 環境變量
6.1 選中“計算機”,右鍵“屬性”,再選 “高級系統設置”


6.2 點“編輯”后,在末尾先加上“半角分號”,再輸入 d:\wcp\ComponentStudy\bpl\


6.3 可以這樣驗證一下


6.4 操作完畢之后,重新 delphi ,再 install dclSimpleEdit 就OK了。


6.5 在組件的 SimpleComponent 標簽中檢查,確認已經安裝成功。PATH 環境變量,在任何操作系統,任何軟件中都重要,
如:java 環境安裝,andorid 等等,請對其有正確的理解。


七,使用此組件。重啟 delphi ,打開 ComponentStudy\UseSimpleEdit\UseSimpleEdit.dpr
並往Form 中拖一個 TSimpleEdit, F9 測試效果。


本文的重點是講組件安裝,所寫范例代碼也比較簡單。
八、關於各種目錄的設置問題。
8.1 菜單 Tools --> Environment Options..


8.2 Library path


很明顯,已經自動加上了此路徑。此路徑的作用,可以理解為 pas 文件的搜索路徑。
此路徑為全局,對任何工程有效。如果有多個版本的組件共存,可以改變這些目錄的順序,
來設置當前有效的組件版本。
8.3 在 exe 工程中,另一處與此功能相同的路徑, 菜單 proejct -->Options... (Shift + Ctrl + F11)




此功能為局部,僅屬於本工程使用。同樣的,此單菜中關於 packages 中的選項,
亦有“本工程有效BPL”的功效(請自行研究)。這些設置,在多版本組件同時存在於delphi時非常有用。
九、其它:
9.1 delphi 安裝組件的信息記錄在何處,菜單 Component -->Install Package...


它實際上存在於注冊表中 [HKEY_CURRENT_USER\Software\Borland\Delphi\7.0\Known Packages]

9.2 組件自動安裝包,實際上就是寫注冊表,寫 PATH 環境變量(libray path 目錄信息也是在注冊表中)來實現的。
9.4 多版本組件如何共存。(稍復雜,用處不大,但可行)
a) 要讓它們的 BPL 輸出在不同的目錄中。默認是全部在 C:\Program Files (x86)\Borland\Delphi7\Projects\Bpl ,
是不行的(bpl同名的問題),所以各種組件安裝教程,讓大家先刪除掉此目錄中的 *xx*.bpl 等操作原因在此。
(或 PATH 環境變量中所涉及到的目錄,如 Windows\System32\ 等,要在這些目錄中執行刪除 *xx*.bpl 操作)
b) 不可同時使用,且要使用 8.2 步驟中改變目錄順序。或者用 8.3 菜單中,的 Package 選項,來增減加載的組件。
十、出錯演示,刪除掉 PATH 環境變量中的 d:\wcp\ComponentStudy\TSimpleEdit\bpl ,重運行 delphi 結果如下


確定之后


詢問是否下一次繼續加載。
此信息的意思是, dclSimpleEditD7.bpl 找不到 SimpleLable.bpl ,是否在下一次
加載 dclSimpleEditD7.bpl ?
選擇是,設置好 PATH 環境變量,重啟 delphi 就能正常。
選擇否的結果:


已經取消勾選。當然,你設置正確 PATH 變量后,重啟后勾上也就可能正常工作了。
(也可以在這里通過 add 安裝組件)
9.5 如果exe中的組件與安裝的版本不相符合時,會出現版本不同,屬性不存在等提示,通過學習本教程,
相信大家就可以解決此類問題了。
delphi 的組件編寫,組件安裝,是一套很明晰的規則,而很多人,面對此規則的時候,手忙腳亂,
到處搜各種秘籍,方法,然而往往解決不到根本問題。
學習編程知識,一定要從表面現象,洞悉到其原理。這樣才能真正掌握。
又如:delphi各種組件的使用方法,組件千千萬,請問誰學得完?
但是,高手們拿到一個組件,稍加研究,就會使用,這是為什么?
既要學習“規則,知識小點”,又要上升為“技能,通識”。
后記:
2018.5.02晚,delphi 2007,安裝 UniDAC 組件。
1.已用多種方法安裝過,IDE中同時存在2套 UniDAC ,刪之,重裝不行。
2.根據報錯信息,發現是 DbGridEh 組件,對 dac105.bpl 有 hook 或是調用。
可能原因:
a) DbGridEh 組件,在調用數據庫驅動組件的時候,用了全局path,直接加載了 dac105.bpl
b) 也可能是 dbgridEh 調用了同名( dac105.bpl )
c) DBGridEh 有 hook 操作。
3.刪掉 DBGridEh 組件,安裝UniDAC, OK.
4.重安裝另一版 DBGridEh ,OK
所用到的方法,均在本文提及,靈活運用即可。