1. 程式人生 > >如何讓控制元件在編譯時,自動新增所需的單元

如何讓控制元件在編譯時,自動新增所需的單元

在開發控制元件的時候,常會類似碰到這樣的情況:我某個方法或事件的引數的型別,並不在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;