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

2021-09-02 04:14:32 字數 884 閱讀 4311

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

如何修改Delphi自帶控制項

舉例說明 比如要在dialogs單元新增乙個新的函式proc superbirdxp 1 備份delphi的lib目錄中的dialogs.dcu檔案 source目錄中的dialogs.pas檔案。2 新建乙個資料夾比如 delphifolder 2 將source中的dialogs.pas檔案拷貝...

在編譯時為什麼使用分頁會導致覆蓋問題?

這個問題困擾了我一天,結果在第二天早上醒來就想通了。一切的一切,記得一句話分頁的虛擬位址是一維的,分段的虛擬位址是二維的 憑頁號x到頁表查,獲取到實際的物理頁a位址 實際位址是物理頁位址a 頁內偏移y,注意這裡是拼接,而不是加法 二維就是經過兩次對映後獲得的位址,分段模式中的段頁式的虛擬位址就是二維...

Atitit 如何讓精靈控制項運動

atitit 如何讓 精靈控制項運動 讓sushi精靈動起來 上面的 我們建立了靜態的sushisprite,現在我們讓它動起來。使它從螢幕頂部下落到螢幕底部。在addsushi方法中新增如下 var dorpaction cc.moveto.create 4,cc.p sushi.x,30 sus...