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

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

編輯:Delphi

1. 決定畫什麼

圖形部件通常都具有改變外觀的能力,圖形控制的外觀取決於其某些屬性的結合,例如Gauge控制具有決定其形狀、方向和是否圖形化地顯示其過程的能力。同樣,Shape控制也應有決定顯示各種形狀的能力.

給予Shape控制這種能力,增加名為Shape的屬性。這需要下列三步:

● 聲明屬性類型

● 聲明屬性

● 編寫實現方法

⑴ 聲明屬性類型

當聲明一個用戶自定義類型的屬性時,必須首先聲明屬性類型。最普通地用於屬性的自定義類型是枚舉類型。

對Shape控制來說,需要聲明一個該控制能畫形狀的枚舉,下面是枚舉類型的聲明:

type

TSampleShapeType=(sstRectangle, sstSquare, sstRoundRect,

sstRoundSquare, sstEllipse, sstCircle);

TSampleShape = class(TGraphicControl)

end;

這樣,就可以用該類型來聲明屬性。

⑵ 聲明屬性

當聲明一個屬性時,通常需要聲明私有域來保存屬性值,然後描述讀寫屬性值的方法。

對於Shape控制,將聲明一個域保存當前形狀,然後聲明一個屬性通過方法調用來讀寫域值。

type

TSampleShape=class(TGrahpicControl)

private

FShape: TSampleShapeType;

procedure SetShape(value: TSampleShapeType);

published

property Shape: TSampleShapeType read FShape write SetShape;

end;

現在,只剩下SetShape的實現部分了。

⑶ 編寫實現方法

下面是SetShape的實現:

procedure TSampleShape.SetShape(value: TSampleShapeType);

begin

if FShape<>value then

begin

FShape := value;

Invalidate(True); { 強制新形狀的重畫 }

end;

end;

2. 覆蓋constructor和destructor

為了改變缺省屬性值和初始化部件擁有的對象,需要覆蓋繼承的constructor和destructor方法。

圖形控制的缺省大小是相同的,因此需要改變Width和Height屬性。

本例中Shape控制的大小的初始設置為邊長65個象素點。

⑴ 在部件聲明中增加覆蓋constructor

type

TSampleShape=class(TGraphicControl)

public

constructor Create(Aowner: TComponent); override;

end;

⑵ 用新的缺省值重新聲明屬性Height和width

type

TSampleShape=class(TGrahicControl)

published

property Height default 65;

property Width default 65;

end;

⑶ 在庫單元的實現部分編寫新的constructor

constructor TSampleShape.Create(Aowner: TComponent);

begin

inherited Create(AOwner);

width := 65;

Height := 65;

end;

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