天天看點

Delphi元件開發教程指南(1)元件開發概述

   在開講之前,首先,我假設你了解什麼是面向對象,什麼是類。如果不了解的話,建議先去了解一下相關知識!

   在Delphi中,元件,我們可以将它了解為一個個的封裝好了的功能對象庫,使用這個庫,就隻用簡單的幾句代碼,甚至僅僅簡單的設定幾個屬性就能實作某些功能,我們可以将元件想象成日常生活中使用的某些工具,比如說收音機,我們不必了解其内部構造,隻用在播放器上點一個收聽按鈕就能收聽廣播。其實這不僅僅是Delphi元件,Delphi的中的各種對象庫都是如此,比如TStingList,隻用簡單幾句代碼就能實作一些功能,元件與對象庫本質相同,唯一不同的就是元件通過Delphi的IDE接口注冊到了IDE中,可以進行可視化的設計,而其他的對象庫,需要我們手動建立,然後調用!

   上面簡單闡述了一下Delphi的元件的某些特性以及與其他對象庫的一些差別。下面,咱在說說Delphi的元件的構造層次,說到這個類的層次,有一個非常有名的Delphi對象層次圖的(但是我不曉得在什麼地方了,有興趣的可以自己搜搜看,不看也不影響下面的講解說明)。上面說了,Delphi的元件其實也是一個對象庫,也就是一個類,在Delphi中所有對象的基類都是TObject,元件的最最最基類也是TObject,這裡有一個來源于網絡的不完整的類結構圖

這個結構中元件的類層次用黑色粗體标記出來了,也就是

TObject---------->TPersistent------------>TComponent------------->TControl

TControl又繼續分支

TPersistent這個類,這個類是一個可持續化的對象庫,隻要從這個類繼承下來的,都自動具備了串行化的功能,可以非常友善的讀入與寫入到流,這個特性就友善了元件中的屬性資訊能非常友善的記錄到窗體資源檔案。

TComponent這個就是所有Delphi元件的基類,所有想要注冊到IDE直接進行可視化設計的對象庫,都要從這個類繼承。TComponent提供了必不可少的資訊以使元件能夠在Delphi的IDE上運作。然後TComponent下衍生出了TControl的類,這個類就是所有的在運作期間可視控件的基類,比如Label,Panel等,隻要從TControl繼承下來,就能實作運作期間可視化。如果直接從TComponent向下繼承的話,那麼在運作期間就不可見了,比如說TTimer等。

TControl類,從圖上可見,從他開始又有了分支了,分了TGraphicControl,TWinControl。先說TWinControl,TWincontrol就是Windows控件庫的基類,這個類封裝了大部分Windows的消息響應以及建立參數。再來看TGraphicControl,這個是個特殊的控件基類,也就是Label,Image等控件庫的基類,其實,他本身不算是一個Windows的控件,而是依托于Windows控件之上的一塊區域,所有的消息資訊都由他所依托的Windows控件(也就是他的Parent)來響應,然後分派出來,之後他本身才響應這些消息(比如說,TImage控件建立的一個圖檔顯示控件Image1,它的Parent是Form,那麼他的MouseDown,MouseUp,MouseMove等消息的響應,實際上是當這個圖檔控件建立了之後,它的Parent就指定了一塊區域是屬于用來顯示那個圖檔的,當滑鼠在Form上移動,移動到那個區域的時候,就給TImage派發一個MouseMove消息,于是這個消息就響應了,滑鼠按下與滑鼠彈起消息也都是如此),從TGraphicControl繼承過來的元件,它内部都有Canvas畫布屬性,其實,這個Canvas在大多數時刻實際上是用的它的Parent的Canvas,也就是說他的Canvas與GraphicControl.Parent.Canvas是同一個裝置場景,那麼為什麼是大多數時刻,而不是任何時刻,且聽我慢慢說來!其實也是在任意時刻都是Parent的canvas,不過那個任意時刻是有條件的,也就是在那個元件的實作内部,開放給使用者使用的Canvas就未必是Parent的Canvas了,這個最典型的列子就是TImage這個控件了,TImage開放給我們使用的Canvas實際上是一個TBitmap的Canvas,而其内部的Canvas并未真正開放出來,而僅僅是作為将圖檔繪制到Parent的裝置場景上使用。是以此時,我鄭重指出,TGraphicControl實際上是一個虛拟的界面控件,本控件不具備句柄,切莫在未給它指定Parent的情況下,試圖去使用引起控件重繪等消息的方法,比如Invalidate等。

從TwinControl繼承下來的控件,都是具備有控件句柄的,也就是在Windows内部具備有唯一标記,能動态索引找到的。

TScrollingWinControl就是具備有滾動條的,Form就是來源于此。

TcustomControl這個就是通常給咱使用來開發繼承新的控件地。

   在建立元件之前,我們需要明确,這個元件是可視的元件(運作期間可見)還是非可視元件,如果是可視的元件,那麼我們就要從TWincontrol或者TGraphicControl繼承一個新的對象類來實作,如果是非可視的元件,那麼我們就從TComponent繼承來實作,至于為什麼,上面已經說了。由于在開發元件的時候,各個人的水準層次不一樣,然而建立一個新的元件,都需要建立一個新的對象類,是以此時各人根據各人的需求和能力做不同的構造,能力需求點不一樣,建立方式也可能不同,一般新手,建議采用向導,找到菜單中的Component那個菜單,然後選擇第一個菜單NewComponent,就能打開這個建立控件的向導,這個向導中列出來了Delphi的元件庫中的所有元件,根據自己的需要選擇一個你需要擴充的控件或者選擇TComponent或者TCustomControl建立您的新元件。建立好了之後就能進行元件的擴充與編寫了!

  休息一下,敬請期待下一篇,簡單擴充TEdit

由于個人水準有限,文中,難免有纰漏錯誤之處,歡迎各位大蝦拍磚指正!

本文轉自 不得閑 部落格園部落格,原文連結:http://www.cnblogs.com/DxSoft/archive/2010/04/26/1721140.html   ,如需轉載請自行聯系原作者