Delphi編寫自定義控件以及接口的使用


寫給覺得自己編寫Delphi很復雜的人,包括自己。

Delphi自己寫控件其實並不難,難的在於開發復雜的控件。(其實,編程,很多東西都是會了就不難,因此,我怕自己日后覺得自己寫控件很難,特意在這記錄自己寫控件的過程,順便也寫下接口的使用)

第一步:控件代碼:

下面是控件的一個Unit內容:

 

復制代碼
代碼
unit pgdbedit;

interface

uses
  SysUtils, Classes, Controls, StdCtrls, CnEdit;

const
  IID_pgDBConInterface='{88CEA70D-0506-4CC0-ABB0-4BDBFA0DDBCE}';


type
  TdbType = (dbText, dbInteger, dbFloat, dbBit, dbTime, dbBlob); //文本類型

  IpgDBConInterface = interface(IInterface) //定義數據庫操作控件的接口
    [IID_pgDBConInterface]
    //Stdcall是指示函數的參數入棧方式是從右到左
    function GetCanUpdate: Boolean;
    procedure SetCanUpdate(value: Boolean);
    property DB_canUpdate: Boolean read GetCanUpdate write SetCanUpdate; //是否更新數據。
  end;
  TpgDbEdit = class(TEdit, IpgDBConInterface)
  private
    { Private declarations }
    FCanUpdate: Boolean;
    function GetCanUpdate: Boolean;
    procedure SetCanUpdate(value: Boolean);
  protected
    { Protected declarations }
  public
    { Public declarations }
  published
    { Published declarations }
    property DB_canUpdate: Boolean read GetCanUpdate write SetCanUpdate; //是否更新數據。

implementation

function tpgdbedit.GetCanUpdate: Boolean;
begin
  Result:=FCanUpdate;
end;

procedure tpgdbedit.SetCanUpdate(value: Boolean);
begin
  FCanUpdate:=value;
end;
end.
復制代碼

 

 

說明:這里沒有RegisterComponents是因為打算創建2個包,一個是運行時的包以及設計時的包。

 

第二步:創建注冊單元:

下面是這個單元的源碼:

 

復制代碼
代碼
unit pgControlsRegister;

interface
uses
  Classes;

procedure Register;
{* 控件、組件編輯器、屬性編輯器注冊過程}

implementation

uses
  pgdbedit;

procedure Register;
begin
  RegisterComponents('pgControls', [TpgDbEdit]);
end;

end.
復制代碼

 

 

第三步:創建運行時的包:

(文件->新建->其它->Package)

在創建出來的Package中點上面的Add按鈕,把第一步中的單元添加進去,然后點上面的Options按鈕,在Usage Options中選擇Runtime only。點擊OK關閉掉Options,然后點Compile進行編譯,系統會提示需要加入其它包的,點確認就行了,系統會自動添加必要的包。這樣,運行時的包就創建完了。

 

第四步:創建設計時的包:

(文件->新建->其它->Package)

在創建出來的Package中點上面的Add按鈕,把第二步中的單元添加進去,然后點上面的Options按鈕,在Usage Options中選擇Designtime only。點擊OK關閉掉Options,然后點Compile進行編譯,系統會提示需要加入其它包的,點確認就行了,系統會自動添加必要的包。這樣,設計時的包就創建完了。

 

有關這兩個包的概念,大家可以去:

http://www.cnpack.org/showdetail.php?id=510&lang=zh-cn

看下介紹,我都是看了介紹才知道,才會去這樣弄。這里,我們也是安裝設計時的包就行了。運行時的包不用管。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM