如何讓控制元件在編譯時,自動新增所需的單元
阿新 • • 發佈:2018-11-29
在開發控制元件的時候,常會類似碰到這樣的情況:我某個方法或事件的引數的型別,並不在Delphi預設新增的單元中,如果此時直接編譯,必然會報錯。但是讓使用者逐個把所需的單元添加回來,又顯然太麻煩了,甚至使用者也不知道該新增哪些單元。有沒有辦法讓它自動化一點,在編譯時,讓控制元件自動給單元新增所需的單元呢?答案是肯定的。
首先引用DesignEditors和DesignIntf單元。然後在控制元件單元,編寫一個繼承自TSelectionEditor的類,例如說叫TMyUnitSelector吧
type TMyUnitSelector = class(TSelectionEditor) public procedure RequiresUnits(Proc: TGetStrProc); override; // 覆蓋此方法來新增所需的單元 end; procedure TMyUnitSelector.RequiresUnits(Proc: TGetStrProc); begin // 例如說,我要在編譯時,控制元件能夠自動給當前單元新增上DB和DBClient這兩個單元 Proc('DB'); Proc('DBClient'); end;
最後在註冊控制元件的Register過程中,加上以下一句就可以了(假設控制元件類名叫TMyEdit)
procedure Register;
begin
RegisterComponents('Samples', [TMyEdit]);
RegisterSelectionEditor(TMyEdit, TMyUnitSelector); // 讓控制元件和SelectionEditor關聯
end;