background image

propertyColor:TColorreadFColorwriteSetColordefaultclWhite;
end;
说明:
a.我们只添加了一个属性,因此在 published 段的代码下只有一个 Color 属性,并将默认颜
色设为白色(

clWhite,当然你可以随意改变)。

b.重载构造函数和析构函数,二者应为可以在外部调用,因此应将其放在 public 段。
c.读属性的私有数据域 FColor 和属性的写方法 SetColor,应放在私有段(private),其它与此
相关的非独立的变量和过程

/函数等也应放在 private 段,以使在类以外不能访问它们。

2. Delphi 自动生成的 procedureReGISter 可以不理它。我们在它的过程体之后,在 end.(注意
符号

“.”)之前手工加上以下代码,完成我们在上面定义的全部过程的过程体编写(这里我

们没有定义有函数原型):

//***构造函数*****************************************************

constructorTButton1.Create(AOwner:TComponent);
begin
inheritedCreate(AOwner);
FCanvas:=TCanvas.Create;
FColor:=clWhite;//默认颜色
end;

//***析构函数*************************************************
destructorTButton1.Destroy;
begin
FCanvas.Free;
inheritedDestroy;
end;

//***定义按钮样式,必须将该按钮重定义为自绘式按钮*************
procedureTButton1.CreateParams(varParams:TCreateParams);
begin
inheritedCreateParams(Params);
withParamsdoStyle:=StyleorBS_OWNERDRAW;
end;

//***属性写方法************************************************
procedureTButton1.SetColor(Value:TColor);
begin
FColor:=Value;
Invalidate;
end;

//***设置按钮状态***********************************************
procedureTButton1.SetButtonStyle(ADefault:Boolean);