程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 第十九章-Delphi自定義部件開發(四)(3)

第十九章-Delphi自定義部件開發(四)(3)

編輯:Delphi

3. 公布Pen和Brush

在缺省情況下,一個Canvas具有一個細的、黑筆和實心的白刷,為了使用戶在使用Shape控制時能改變Canvas的這些性質,必須能在設計時提供這些對象;然後在畫時使用這些對象,這樣附屬的Pen或Brush被稱為Owned對象。

管理Owned對象需要下列三步:

● 聲明對象域

● 聲明訪問屬性

● 初始化Owned對象

⑴ 聲明Owned對象域

擁有的每一個對象必須有對象域的聲明,該域在部件存在時總指向Owned對象。通常,部件在constructor中創建它,在destructor中撤消它。

Owned對象的域總是定義為私有的,如果要使用戶或其它部件訪問該域,通常要提供訪問屬性。

下面的代碼聲明了Pen和Brush的對象域:

type

TSampleShape=class(TGraphicControl)

private

FPen: TPen;

FBrush: TBrush;

end;

⑵ 聲明訪問屬性

可以通過聲明與Owned對象相同類型的屬性來提供對Owned對象的訪問能力。這給使用部件的開發者提供在設計時或運行時訪問對象的途徑。

下面給Shape控制提供了訪問Pen和Brush的方法

type

TSampleShape=class(TGraphicControl)

private

procedure SetBrush(Value: TBrush);

procedure SetPen(Value: TPen);

published

property Brush: TBrush read FBrush write SetBrush;

property Pen: TPen read FPen write SetPen;

end;

然後在庫單元的implementation部分寫SetBrush和SetPen方法:

procedure TSampleShape.SetBrush(Value: TBrush);

begin

FBrush.Assign(Value);

end;

procedure TSampleShape.SetPen(Value: TPen);

begin

FPen.Assign(Value);

end;

⑶ 初始化Owned對象

部件中增加了的新對象,必須在部件constructor中建立,這樣用戶才能在運行時與對象交互。相應地,部件的destructor必須在撤消自身之前撤消Owned對象。

因為Shape控制中加入了Pen和Brush對象,因此,要在constructor中初始化它們,在destructor中撤消它們。

① 在Shape控制的constructor中創建Pen和Brush

constructor TSampleShape.Create(Aowner: TComponent);

begin

inherited Create(AOwner);

Width := 65;

Height := 65;

FPen := TPen.Create;

FBrush := TBrush.Create;

end;

② 在部件對象的聲明中覆蓋destructor

type

TSampleShape=class(TGraphicControl)

public

construstor.Create(Aowner: TComponent); override;

destructor.destroy; override;

end;

③ 在庫單元中的實現部分編寫新的destructor

destructor TSampleShape.destroy;

begin

FPen.Free;

FBrush.Free;

inherited destroy;

end;

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