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

2021-04-16 16:03:12 字數 2906 閱讀 5884

這篇文章算是對我前段時間學習的乙個學習總結,以及對自己學習過程的乙個回顧。本文通過乙個簡單的例子來盡可能的展示

vcl元件開發的各個方面,本文針對即將學習元件開發的初學者,如果你已經熟悉元件開發或認為本文內容過於基礎簡單,那麼本文對你毫無用處。閱讀本文,假設你已經熟悉

delphi

的普通程式設計以及

vcl的結構層次,還有一些重要的關鍵字:

published

、property等。(

注:本文內容建立在

delphi5.0

及以上版本)

1、顯示系統的當前時間(包括設定鬧鐘)。

2、跑錶。

3、倒計時。這是乙個簡單的例子,然而我們將在這個例子中盡可能多的用到

delphi

·元件和元件包

·元件的屬性類別

·元件的屬性編輯器

·元件編輯器

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

元件和元件包的關係就如同普通工程中

unit

和工程檔案的關係一樣,通常你所安裝的元件都是以元件包的形式發布的,乙個元件包中可以有很多個元件,在元件開發中,元件包就是專案的工程檔案

.為了開始開發我們的元件(我們把他叫做

tclock

)並將它包括在我們自己的元件包(

clockpackage

)中,我們選擇

file

ànew

àother

在彈出的視窗中的

new頁選擇

package

新建乙個元件包,得到乙個元件包視窗,檢視這個元件包的原檔案(

.dpk

),得到以下**:

package clockpackage;

…….…….

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

下已經多了我們剛才建立的元件的檔案,雙擊它開始編寫**。

在**中我們需要注意在

inte***ce

部分的乙個新的過程:procedure register;(注意:

delphi

規定register

r必須大寫,這是乙個保留字),這個過程是作為每乙個元件所必須有的,它完成元件的註冊,包括元件本身以及如屬性編輯器等多種元件特性的註冊):

procedure register;

begin

registercomponents('clockandtime', [tclock]);

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

clockandtime

頁了嗎?

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

end;

通過例項看VCL元件開發全過程

這篇文章算是對我前段時間學習的乙個學習總結,以及對自己學習過程的乙個回顧。本文通過乙個簡單的例子來盡可能的展示vcl元件開發的各個方面,本文針對即將學習元件開發的初學者,如果你已經熟悉元件開發或認為本文內容過於基礎簡單,那麼本文對你毫無用處。閱讀本文,假設你已經熟悉delphi的普通程式設計以及vc...

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

這篇文章算是對我前段時間學習的乙個學習總結,以及對自己學習過程的乙個回顧。本文通過乙個簡單的例子來盡可能的展示vcl元件開發的各個方面,本文針對即將學習元件開發的初學者,如果你已經熟悉元件開發或認為本文內容過於基礎簡單,那麼本文對你毫無用處。閱讀本文,假設你已經熟悉delphi的普通程式設計以及vc...

Ext元件渲染render的全過程詳述

模板模式是設計模式中很重要的乙個知識點,我在模式總結 模板方法這篇文章中已有總結,在物件導向設計中有著舉足輕重的地位。在ext中更是發揮的淋漓盡致,為什麼這麼說呢?ext中的元件有著很深的繼承關係,很多方法都有著重複,而且不僅 是 上的重複,更多的是流程上的重複 比方說,ext.panel吧,將乙個...