Welcome

首页 / 软件开发 / Delphi / 第十九章-Delphi自定义部件开发(四)(2)

第十九章-Delphi自定义部件开发(四)(2)2007-05-071. 决定画什么

图形部件通常都具有改变外观的能力,图形控制的外观取决于其某些属性的结合,例如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;