下面的代码声明了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 TSampleShapeSetBrush(Value: TBrush)
begin
FBrushAssign(Value)
end;
procedure TSampleShapeSetPen(Value: TPen)
begin
FPenAssign(Value)
end;
⑶ 初始化Owned对象
部件中增加了的新对象必须在部件constructor中建立这样用户才能在运行时与对象交互相应地部件的destructor必须在撤消自身之前撤消Owned对象
因为Shape控制中加入了Pen和Brush对象因此要在constructor中初始化它们在destructor中撤消它们
① 在Shape控制的constructor中创建Pen和Brush
constructor TSampleShapeCreate(Aowner: TComponent)
begin
inherited Create(AOwner)
Width := ;
Height := ;
FPen := TPenCreate;
FBrush := TBrushCreate;
end;
② 在部件对象的声明中覆盖destructor
type
TSampleShape=class(TGraphicControl)
public
construstorCreate(Aowner: TComponent) override;
destructordestroy; override;
end;
③ 在库单元中的实现部分编写新的destructor
destructor TSampleShapedestroy;
begin
FPenFree;
FBrushFree;
inherited destroy;
end;
④ 设置Owned对象的属性
处理Pen和Brush对象的最后一步是处理Pen和Brush发生改变时对Shape控制的重画问题Pen和Brush对象都有OnChange事件因此能够在Shape控制中声明OnChange事件指向的事件处理过程
[] [] [] []