透過例項看VCL元件開發全過程(一) (轉)

amyz發表於2007-11-12
透過例項看VCL元件開發全過程(一) (轉)[@more@]

透過例項看VCL開發全過程

  這篇文章算是對我前段時間學習的一個學習總結,以及對自己學習過程的一個回顧。本文透過一個簡單的例子來儘可能的展示VCL元件開發的各個方面,本文針對即將學習元件開發的初學者,如果你已經熟悉元件開發或認為本文內容過於基礎簡單,那麼本文對你毫無用處。閱讀本文,假設你已經熟悉的普通設計以及vcl的結構層次,還有一些重要的關鍵字:published、property等。(注:本文內容建立在delphi5.0及以上版本)

 :namespace prefix = o ns = "urn:schemas--com::office" />

  在這篇文章中我們將建立一個和時間有關的元件,這個元件透過設定它的不同狀態有以下基本功能:1、顯示的當前時間(包括設定鬧鐘)。2、跑表。3、倒數計時。這是一個簡單的例子,然而我們將在這個例子中儘可能多的用到delphi在元件開發中的多種特性,你可以透過以下列舉出的本文涉及特性有選擇的閱讀:

  ·元件和元件包

  ·元件的屬性類別

  ·元件的屬性編輯器

  ·元件編輯器

 

一、元件和元件包,以及一些你應該知道的型別:

元件和元件包的關係就如同普通工程中unit和工程檔案的關係一樣,通常你所的元件都是以元件包的形式釋出的,一個元件包中可以有很多個元件,在元件開發中,元件包就是專案的工程檔案.為了開始開發我們的元件(我們把他叫做TClock)並將它包括在我們自己的元件包(ClockPackage)中,我們選擇Fileànewàother在彈出的視窗中的New頁選擇Package新建一個元件包,得到一個元件包視窗,檢視這個元件包的原檔案(.dpk),得到以下程式碼:

package ClockPackage;

 

{$R *.res}

{$ALIGN 8}

{$ASSERTIONS ON}

…….

…….

{$DESCRIPTION 'Our Clock Pack'}

{$IMPLICITBUILD OFF}

 

requires

  rtl;

 

end.

這個檔案其實就是元件開發中的工程檔案,requires關鍵字指示了元件包所需元件包的列表,隨著向元件包中加入元件(類似於單元檔案),你還會看到contains關鍵字,指示了元件包所包含的元件,你可以透過元件包視窗中的add和remove按紐來新增新的元件和刪除已有的元件。另外這個程式碼中所包含的大量的開關大多都可以在元件包窗體上的Options中設定。這裡需要補充說明的是元件包的3種重要屬性(都在Options中):Designtime Only、Runtime Only、Designtime and runtime(這3個詞的意思有英語基礎的朋友應該都知道吧),對於大多數的元件包我們只要選擇最後一個就可以了,然而有些元件包設計為只執行時(這樣你用這套元件開發的程式不能脫離元件而單獨執行,元件包也不能被安裝),有些元件包被設計為只設計時(這將在後文有更詳細的說明)。

瞭解了元件和元件包,我們對元件開發中可能出現的一些你沒有見過的檔案做一些說明:dpk檔案既元件包的原始碼;bpl檔案,元件包編譯後的結果,在沒有釋出dpk的情況下可以透過bpl來安裝元件包到delphi(ProjectàOptionsàPackagesàadd);pas在這裡就是元件包中元件的原始碼了;dcu為pas編譯後的結果,在你選擇將元件包含進元件包時(contains關鍵字),你可以選擇釋出原始碼或是不釋出(dcu檔案);dcp如果你將元件作為執行時元件,聯結器將使用該檔案。

 

二、開始開發元件:

瞭解了上面的知識後,我們就可以開始開發元件了!在元件窗體中單擊add,選擇NewComponent頁,在第一個組合框中選擇我們的元件將要繼承自哪個類(通常新的元件是透過繼承已有的元件來開發的),由於這個元件的主要作用是要顯示時間、跑表、倒數計時種的文字資訊,所以我們選擇繼承自TCustomLabel(由於我們並不需要Tlabel的全部功能,我們選擇了能夠隱藏Tlabel屬性並有選擇的釋出它的屬性的TcustomLabel類)。接下來為我們的新元件取一個名字Tclock,然後指定我們想把元件安裝到哪一個頁中,這裡我們自己鍵入一個ClockAndTime頁,這將出現在RegisterComponents過程中(後面會詳細說明),選擇好檔案儲存的路徑後(最好把它和元件dpk包放在同一目錄)確認。這是元件包窗體中的contains下已經多了我們剛才建立的元件的檔案,雙擊它開始編寫程式碼。

在程式碼中我們需要注意在interface部分的一個新的過程:procedure Register;(注意:delphi規定Register的R必須大寫,這是一個保留字),這個過程是作為每一個元件所必須有的,它完成元件的註冊,包括元件本身以及如屬性編輯器等多種元件特性的註冊):

procedure Register;

begin

  RegisterComponents('ClockAndTime', [TClock]);

//這個過程註冊元件本身,注意到前面定義的ClockAndTime頁了嗎?

  //這裡在後面還會出現一些新的過程,包括註冊元件的屬性類別等等。

end;

在下一篇中我們將給出這個元件的全部原始碼。

(未完待續)


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-981896/,如需轉載,請註明出處,否則將追究法律責任。

相關文章