⑵ 声明属性
当声明一个属性时通常需要声明私有域来保存属性值然后描述读写属性值的方法
对于Shape控制将声明一个域保存当前形状然后声明一个属性通过方法调用来读写域值
type
TSampleShape=class(TGrahpicControl)
private
FShape: TSampleShapeType;
procedure SetShape(value: TSampleShapeType)
published
property Shape: TSampleShapeType read FShape write SetShape;
end;
现在只剩下SetShape的实现部分了
⑶ 编写实现方法
下面是SetShape的实现
procedure TSampleShapeSetShape(value: TSampleShapeType)
begin
if FShape<>value then
begin
FShape := value;
Invalidate(True) { 强制新形状的重画 }
end;
end;
覆盖constructor和destructor
为了改变缺省属性值和初始化部件拥有的对象需要覆盖继承的constructor和destructor方法
图形控制的缺省大小是相同的因此需要改变Width和Height属性
本例中Shape控制的大小的初始设置为边长个象素点
⑴ 在部件声明中增加覆盖constructor
type
TSampleShape=class(TGraphicControl)
public
constructor Create(Aowner: TComponent) override;
end;
⑵ 用新的缺省值重新声明属性Height和width
type
TSampleShape=class(TGrahicControl)
published
property Height default ;
property Width default ;
end;
⑶ 在库单元的实现部分编写新的constructor
constructor TSampleShapeCreate(Aowner: TComponent)
begin
inherited Create(AOwner)
width := ;
Height := ;
end;
公布Pen和Brush
在缺省情况下一个Canvas具有一个细的黑笔和实心的白刷为了使用户在使用Shape控制时能改变Canvas的这些性质必须能在设计时提供这些对象然后在画时使用这些对象这样附属的Pen或Brush被称为Owned对象
管理Owned对象需要下列三步
● 声明对象域
● 声明访问属性
● 初始化Owned对象
⑴ 声明Owned对象域
拥有的每一个对象必须有对象域的声明该域在部件存在时总指向Owned对象通常部件在constructor中创建它在destructor中撤消它
Owned对象的域总是定义为私有的如果要使用户或其它部件访问该域通常要提供访问属性
[] [] [] []