程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Delphi組件開發教程指南(3)組件注冊

Delphi組件開發教程指南(3)組件注冊

編輯:Delphi

  在上一篇中,我們簡單的實現了一個對Delphi自身的TEdit編輯框控件的一個擴充!但是我們並不能像Delphi自己的TEdit一樣,能夠在設計狀態下進行設計,而是非得要自己手動創建控件,然後才能使用。這個雖然說也是組件,但是卻失去了組件的可設計的方便性,僅僅可作為一個類庫來使用。現在我就來介紹一下,如何讓這個組件注冊到IDE上,然後讓你能夠在設計狀態下可以設計使用。

  在講注冊組件的時候,我們需要先明白Delphi中的包的概念,這裡我就不做說明了,不清楚的,可以到Cnpack網站去了解這方面的知識。在注冊組件時,就需要一個設計期間的包文件,然後將我們上次新建的Edit的那個單元文件添加到包中。首先,我們新建一個包文件,然後添加單元文件:

  從圖上的操作可以看到,我先新建了一個名字叫做TestPackage的包,然後將Edit1.pas的單元文件添加到這個包裡面了,之後編譯,安裝了之後,就將控件顯示在Standard那個組件欄中了,裡面有一個TEdit1的組件,那個就是我們從TEdit繼承過來的新組件!然後再看屬性編輯器中就多了Alignment這個屬性,設置它,就能設置文字的對齊方式了。

  好了,到此為止,這個簡單組件就注冊完成了,可能有人不了解,就建立一個包,編譯安裝,就能將組件注冊到IDE的組件欄中去嗎?實際上當然不是做個安裝包編譯一下就完了的。還記得,在上一篇中,我最開始用組件編寫向導做了什麼嗎?我選擇了將組件安裝到Standard那個欄上。有心的人打開 Eidt1.pas可能就會發現在Edit1.pas中有一個注冊的過程為

procedure Register;
implementation
procedure Register;
begin
 RegisterComponents('Standard', [TEdit1]);
end;

  這個Register就是組件注冊的過程,包會自動調用的,注冊過程中調用了RegisterComponents這個過程

  這個過程的第一個參數指定要注冊到IDE的哪個組件面板(如果IDE組件面板中沒有你給定的這個值,Delphi會自動添加一個新的組件面板),參數二指定的是要注冊到IDE的組件對象類數組。

  另外,這裡要提出需要注意的一點就是,雖然Delphi本身是不區分大小寫的,但是記得這個組件注冊的過程的Register必須是這個樣子,而不能變成小寫register這樣,否則,組件就注冊不上去了哈,同時,注意,我在前面給TEdit1的新屬性Alignment的聲明是放在Published這個域中的,這是因為要想在IDE設計期環境能夠看到這個屬性,就必須放在Published域下面,該域聲明的變量與屬性以及函數等,能被所有的人看到,開放度最強,Public域的能被大多數看到,但是唯一不能被 IDE設計期的屬性編輯器看到,Protected僅僅能被從它往後繼承的子類看到,Private僅僅能被當前類使用(不過在同一個單元的類中,Delphi默許各個類能相互訪問本單元其他類的任何屬性變量)

     在IDE的組件面板上,可以發現TEdit和TEdit1兩個組件的圖標是一樣的!其實也就是TEdit1同時也繼承的TEdit顯示的圖標,這個圖標是可以換成別的圖標的!下面我們再給這個組件換一個我們自己的圖標,這個可以用Delphi7版本的ImageEditor構建一個dcr文件,新建一個 dcr文件,然後添加位圖,然後添加一個圖片資源,然後修改名稱為你組件的名字,比如這裡叫TEDIT1,將圖片修改成這個名字,然後保存到和 Edit1.pas相同的目錄下保存名字為Edit1.dcr,然後再編譯一下包文件,再去看組件面板上的信息,就發現圖標變了!這裡,因為我用的是 Delphi2007,所以沒有那個ImageEditor的資源編輯器了,這裡我就直接用Brcc32這個資源編譯工具來生成dcr。首先,我們新建立一個rc文件叫Edit1.rc,編輯書寫內容為

  TEDIT1 BITMAP  TEDIT1.bmp

  前面表示資源名稱為TEDIT1 ,Bitmap表示是位圖資源  TEDIT1.bmp指定的就是位圖的文件了

  rc文件建立好了之後,運行命令brcc32 文件路徑\Edit1.rc

  此時,就會在對應的文件夾下生成一個Edit1.res的資源文件,我們將後綴改為dcr,那就是我們需要的那個資源文件了,然後我們再修改Testpackage.dpk的那個包文件代碼

  最先打開的時候是

  代碼

{$R *.res}
{$ALIGN 8}
{$ASSERTIONS ON}
{$BOOLEVAL OFF}
{$DEBUGINFO ON}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
{$LOCALSYMBOLS ON}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION ON}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$REFERENCEINFO ON}
{$SAFEDIVIDE OFF}
{$STACKFRAMES OFF}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST OFF}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
{$IMPLICITBUILD ON}

  此時,我們在最開頭添加一行{$R 'Edit1.dcr'},這個就表示包含進我們剛編輯完成的那個資源文件,然後再編譯,就能看到為組件添加了新的圖標,

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved