国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

通過實例看VCL組件開發全過程(三)

2019-11-18 18:32:32
字體:
來源:轉載
供稿:網友
(接上文)
三、添加組件圖標、注冊組件的屬性類別:
在前面的文章中我們已經完成了組件的基本功能的開發。但是遺憾的是一但你安裝了組件包,你會發現組件顯示在delphi組件頁中的圖標并不能清楚的說明我們組件的功能(由于我們的組件繼承自TcustomLabel,圖標是一個默認的delphiVCL的圖標,如果組件繼承自其它已經出現在組件面板中的組件,圖標還會和已有組件一樣!)。顯然一個好的組件特別是一個要發布的商業化組件需要一個有自己特色的目標,下面我們便來完成這一工作:
打開delphi自帶的Image Editor(ToolsàImage Editor),新建一個組件資源(fileànewàComponent Resource File (.dcr)),在彈出的窗口中右鍵單擊new新建一個bitmap位圖資源調整好位圖的大小(我們用24*24)和色深后確定,雙擊建立好的位圖名字還是做圖(做圖工具的使用基本和windows自帶的畫圖程序差不多,這里略過),完成后我們需要為位圖文件另取一個名字(右鍵點擊bitmap),因為delphi強制要求這個位圖的名字要和組件的名字一樣,并且要全部大寫,這里我們就取為:TCLOCK。最后保存這個資源文件到我們的組件包(dpk文件)目錄,命名為ClockDcr.dcr。最后在Clock的代碼中的interface部分加入一個編譯器開關:{$R ClockDcr.dcr}然后重新編譯更新組件(還記得怎么更新嗎?),這時的組件圖標已經變成我們剛才做的位圖了!
接下來我們將為我們開發的組件的屬性進行分類并介紹一個組件開發中重要的特性:屬性類別。
為了讓我們組件的一些和時鐘有關的屬性注冊成一個新的類別把它們和label的屬性分開開來,讓組件用戶能夠更容易的發現組件的新特性,我們繼承了屬性類別的基類TPRopertyCategory(在delphi5中這需要引用單元DsgnIntf,不過應該特別注意在delphi7中已經沒有了這個基類,也沒有這個單元文件,注冊新的屬性類別可以通過直接使用RegisterPropertyInCategory這種簡單的辦法完成,在下面的代碼中會在相應的地方同時給出兩種方法并說明他們的不同。)并覆蓋它的兩個類方法,最后在Register過程中用RegisterPropertyInCategory(在delphi5中在DsgnIntf單元,在delphi7中在DesignIntf單元,注意:delphi的一些單元并沒有被安裝,包括我們這里指出的這兩個單元和將要在后文中指出的單元,這些單元屬于delphi的open tools api是用來方便我們,特別是組件開發者用來擴展delphi。如果你的delphi沒有這些單元,請將delphi安裝目錄下的source文件夾里ToolsAPI文件夾中的pas文件拷貝到lib目錄下,在你第一個需要用到這些單元的程序編譯時delphi會自動編譯這些單元)方法注冊屬性類別。我們把以下的部分代碼補充進我們開發的組件的原代碼中:
 
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就可以看到屬性已經被清楚的分類了,如下圖:
然而,應該清楚的是屬性類別絕對不能被濫用,因為過多的使用該技術會使組件使用者為了找到某一個屬性變的更加麻煩和摸不著頭腦。

上一篇:通過實例看VCL組件開發全過程(一)

下一篇:通過實例看VCL組件開發全過程(四)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

主站蜘蛛池模板: 文安县| 惠来县| 蓝田县| 林口县| 阜康市| 汝城县| 股票| 汤原县| 瓮安县| 库车县| 正阳县| 祁阳县| 库伦旗| 塘沽区| 柳林县| 县级市| 防城港市| 惠水县| 巴林右旗| 尖扎县| 松滋市| 正蓝旗| 云龙县| 徐汇区| 榆林市| 隆昌县| 朝阳县| 莱阳市| 类乌齐县| 专栏| 青浦区| 苏尼特右旗| 和政县| 毕节市| 怀远县| 扎鲁特旗| 武宣县| 甘德县| 乌拉特后旗| 大关县| 繁昌县|