人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當(dāng)前位置:蘿卜系統(tǒng)下載站 > 技術(shù)開發(fā)教程 > 詳細頁面

通過案例看VCL組件開發(fā)全過程(3)

通過案例看VCL組件開發(fā)全過程(3)

更新時間:2022-09-07 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):

(接上文)

三、添加組件圖標(biāo)、注冊組件的屬性類別:

在前面的文章中我們已經(jīng)完成了組件的基本功能的開發(fā)。但是遺憾的是一但你安裝了組件包,你會發(fā)現(xiàn)組件顯示在delphi組件頁中的圖標(biāo)并不能清楚的說明我們組件的功能(由于我們的組件繼承自TcustomLabel,圖標(biāo)是一個默認的delphiVCL的圖標(biāo),如果組件繼承自其它已經(jīng)出現(xiàn)在組件面板中的組件,圖標(biāo)還會和已有組件一樣!)。顯然一個好的組件特別是一個要發(fā)布的商業(yè)化組件需要一個有自己特色的目標(biāo),下面我們便來完成這一工作:

打開delphi自帶的Image Editor(ToolsàImage Editor),新建一個組件資源(fileànewàComponent Resource File (.dcr)),在彈出的窗口中右鍵單擊new新建一個bitmap位圖資源調(diào)整好位圖的大小(我們用24*24)和色深后確定,雙擊建立好的位圖名字還是做圖(做圖工具的使用基本和windows自帶的畫圖程序差不多,這里略過),完成后我們需要為位圖文件另取一個名字(右鍵點擊bitmap),因為delphi強制要求這個位圖的名字要和組件的名字一樣,并且要全部大寫,這里我們就取為:TCLOCK。最后保存這個資源文件到我們的組件包(dpk文件)目錄,命名為ClockDcr.dcr。最后在Clock的代碼中的interface部分加入一個編譯器開關(guān):{$R ClockDcr.dcr}然后重新編譯更新組件(還記得怎么更新嗎?),這時的組件圖標(biāo)已經(jīng)變成我們剛才做的位圖了!

接下來我們將為我們開發(fā)的組件的屬性進行分類并介紹一個組件開發(fā)中重要的特性:屬性類別。

為了讓我們組件的一些和時鐘有關(guān)的屬性注冊成一個新的類別把它們和label的屬性分開開來,讓組件用戶能夠更容易的發(fā)現(xiàn)組件的新特性,我們繼承了屬性類別的基類TpropertyCategory(在delphi5中這需要引用單元DsgnIntf,不過應(yīng)該特別注意在delphi7中已經(jīng)沒有了這個基類,也沒有這個單元文件,注冊新的屬性類別可以通過直接使用RegisterPropertyInCategory這種簡單的辦法完成,在下面的代碼中會在相應(yīng)的地方同時給出兩種方法并說明他們的不同。)并覆蓋它的兩個類方法,最后在Register過程中用RegisterPropertyInCategory(在delphi5中在DsgnIntf單元,在delphi7中在DesignIntf單元,注意:delphi的一些單元并沒有被安裝,包括我們這里指出的這兩個單元和將要在后文中指出的單元,這些單元屬于delphi的open tools api是用來方便我們,特別是組件開發(fā)者用來擴展delphi。如果你的delphi沒有這些單元,請將delphi安裝目錄下的source文件夾里ToolsAPI文件夾中的pas文件拷貝到lib目錄下,在你第一個需要用到這些單元的程序編譯時delphi會自動編譯這些單元)方法注冊屬性類別。我們把以下的部分代碼補充進我們開發(fā)的組件的原代碼中:



uses

DesignIntf;//delphi7//delphi5用DsgnIntf



///////////這部分代碼如果是delphi7就不需要了///////////////

type

TClockGategory=class(TpropertyCategory)//建立一個新的屬性類別

  Class function Name:string;override;//屬性類別的名稱

  Class function Description:string;override;//屬性類別的描述

End;

……

Class function TClockGategory .Name:string;

Begin

Result:=’ClockPro’;

End;



Class function TClockGategory . Description:string;

Begin

Result:=’Our Component Clock Description’;

End;

////////////////////////////////////////////////////////////////////////////////////

接下來我們要做的就是修改register過程:



procedure Register;

begin

  RegisterComponents('ClockAndTime', [TClock]);

  ////////////這是delphi7的代碼/////////////////////////////

  RegisterPropertyInCategory('ClockPro',TClock,'State');

  RegisterPropertyInCategory('ClockPro',TClock,'Active');

  RegisterPropertyInCategory('ClockPro',TClock,'BeginTime');

  RegisterPropertyInCategory('ClockPro',TClock,'WakeTime');

  RegisterPropertyInCategory('ClockPro',TClock,'AllowWake');

  RegisterPropertyInCategory('ClockPro',TClock,'OnWakeUp');

  RegisterPropertyInCategory('ClockPro',TClock,'OnTimeUp');

  //////////////////////////////////////////////////////////

  ///////////////這是delphi5的代碼/////////////////////////

  {

   RegisterPropertyInCategory(TClockGategory,TClock,'State');

   RegisterPropertyInCategory(TClockGategory,TClock,'Active');

   RegisterPropertyInCategory(TClockGategory,TClock,'BeginTime');

   RegisterPropertyInCategory(TClockGategory,TClock,'WakeTime');

   RegisterPropertyInCategory(TClockGategory,TClock,'AllowWake');

   RegisterPropertyInCategory(TClockGategory,TClock,'OnWakeUp');

   RegisterPropertyInCategory(TClockGategory,TClock,'OnTimeUp');

  }

  ////////////////////////////////////////////////////////

end;

重新編譯后,做一個測試程序,這時只要組件使用者右鍵單擊Object Inspector選擇ArrangeàBy Category就可以看到屬性已經(jīng)被清楚的分類了,


然而,應(yīng)該清楚的是屬性類別絕對不能被濫用,因為過多的使用該技術(shù)會使組件使用者為了找到某一個屬性變的更加麻煩和摸不著頭腦。

在接下來的文章里,我們將繼續(xù)研究兩個很有用的組件特性。

(未完待續(xù))

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統(tǒng)下載排行

網(wǎng)站地圖xml | 網(wǎng)站地圖html
主站蜘蛛池模板: 云安县| 青浦区| 揭阳市| 泽州县| 丰顺县| 浑源县| 抚松县| 咸丰县| 靖西县| 岐山县| 图木舒克市| 横山县| 澳门| 贵南县| 清河县| 兴和县| 河东区| 永仁县| 始兴县| 温州市| 南涧| 泸溪县| 寿阳县| 墨竹工卡县| 紫云| 南雄市| 康马县| 延寿县| 莎车县| 泰和县| 马尔康县| 乌拉特后旗| 莒南县| 海南省| 阜南县| 泰安市| 洪洞县| 云阳县| 台湾省| 舞钢市| 阳西县|