寫給覺得自己編寫Delphi很復雜的人,包括自己。
Delphi自己寫控件其實並不難,難的在於開發復雜的控件。(其實,編程,很多東西都是會了就不難,因此,我怕自己日后覺得自己寫控件很難,特意在這記錄自己寫控件的過程,順便也寫下接口的使用)
第一步:控件代碼:
下面是控件的一個Unit內容:
代碼
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個包,一個是運行時的包以及設計時的包。
第二步:創建注冊單元:
下面是這個單元的源碼:
代碼
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
看下介紹,我都是看了介紹才知道,才會去這樣弄。這里,我們也是安裝設計時的包就行了。運行時的包不用管。

