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

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

編輯:Delphi

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

  在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創建您的新組件。創建好了之後就能進行組件的擴充與編寫了!

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