程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> Delphi中編寫自定義組件

Delphi中編寫自定義組件

編輯:.NET實例教程


Delphi提供了豐富的VCL組件供編程人員使用,同時還允許編程人員根據實際需要進行自定義組件的編寫。
組件的代碼編寫和我們平常寫的類很相似,但也有幾點不同,一個是需要從TComponent類繼承而來,另一個是要使用Published關鍵字定義我們想要出現在對象觀察器中的屬性是事件,再一個就是我們要把這些代碼添加到一個設計包中,之後通過對這個包進行編譯和安裝來發布我們編寫的組件。
組件中事件的定義和屬性定義一樣,使用Property關鍵字,事件的類型可以使用Delphi標准的事件類型如TNofifyEvent,或者是自已定義一個事件類型,其定義方式如下:


Type
    TComponentEvent = procedure(Params) of object;
其中Params是根據組件需要定義的一個或多個參數,可以是任何類型的。
 
下面我們就以具體的實例來講解如何在Delphi中編寫自定義組件。首先在Delphi中新建一個包,然後在包中添加一個單元文件,在單元文件中定義如下組件類


Type
 TMyComponentEvent = procedure (Sender: TObject) of object;
 
 TMyComponent = class(TComponent)
 private
    FMyProperty: String;
    FMyEvent: TMyComponentEvent;
    procedure SetMyProperty(const Value: String);
 protected
    ....
 public
    constructor Create; 
    destructor Destroy; override;
    ...
 published
    //The following propety and event will appear in Object Inspector
    property MyProperty: String read FMyProperty write SetMyProperty;
    property MyEvent: TMyComponentEvent read FMyEvent write FMyEvent;
 end;
實現部分的代碼就省略了,此處僅為說明組件的定義。到此就完成了一個組件的定義。接下來我們就需要將這個組件注冊到Delphi中,讓其他編程人員可以像使用Delphi標准組件一樣在組件面板上看到我們定義的組件,並將其拖放到設計窗體上。注冊組件我們需要寫一個注冊過程,Delphi規定這個過程名必須為Register,且沒有任何參數,在這個過程中我們只需要調用在Classes單元中定義好的RegisterComponents方法(此方法需要兩個參數,第一個是組件面板的名稱,第二個就是要注冊的組件類數組),就可以將我們寫的組定注冊到Delphi中並在組件面板中出現。
 

procedure Register;
begin
 RegisterComponents(‘PageName’, [TMyComponent]);
end;
 
編譯並安裝包,之後就可以在組件面板上看到我們定義的組件圖標了。我們發現組件圖標使用的是Delphi默認的,不形象,也不個性,我們應該如何為這個組件指定一個個性的圖標呢?其實也不難,這裡就要用到了Delphi自帶的工具Image Editor。
我們打開Image Editor,點擊New->Component Resource File,創建一個組件資源文件。此時會出現一個窗體,僅有一個“Components”結點,我們右擊該節點,在彈出的上下文菜單中選擇“New->Bitmap”,此時“Components”結點下會出現一個Bitmap結點,這個結點下還有一個名為“Bitmap1”的結點,即我們新建的Bitmap對象,將“Bitmap1”結點名稱改為我們編寫的組件名稱,注意這裡要全部使用大寫。然後雙擊這個結點就可以編輯一個32×32的圖像了。編輯好之後保存這個資源文件,這裡又有一點要注意,就是這個資源文件需要和組件注冊方法(Register方法)所在的單元文件名相同。最後將這個資源文件加入到我們創建的包中,再重新編譯並安裝這個包。
 
完整的代碼如下:

unit MyComponentUnit;
 
interface
 
usesSysUtils, Classes;
 
Type
 TMyComponentEvent = procedure (Sender: TObject) of object;
 
 TMyComponent = class(TComponent)
 private
    FMyProperty: String;
    FMyEvent: TMyComponentEvent;
    procedure SetMyProperty(const Value: String);
 protected
    ....
 public
    constructor Create; 
    destructor Destroy; override;
    ...
 published
    //The following propety and event will appear in Object Inspector
    property MyProperty: String read FMyProperty write SetMyProperty;
    property MyEvent: TMyComponentEvent read FMyEvent write FMyEvent;
 end;
 
procedure Register;
 
implementation
 
...{ TMyComponent }
 
constructor TMyComponent.Create;
begin
 inherited;
 
end;
 
destructor TMyComponent.Destroy;
begin
 
 inherited;
end;
 
procedure TMyComponent.SetMyProperty(const Value: String);
begin
 FMyProperty := Value;
end;
 
procedure Register;
begin
 RegisterComponents(‘PageName’, [TMyComponent]);
end;
 
end.


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