您的位置:首页 > 其它

编写自定义组件

2004-11-23 11:00 295 查看
V C L类描述

TO b j e c t                    直接从TO b j e c t继承下来的类不是组件。有些以此为基类的对象在设计期不需要使用,如T I n i F i l e
T C o m p o n e n t         这是非可视组件的起点,它的特点是在设计时能够以流的方式在I D E上存取
T G r a p h i c C o n t r o l          创建一个不需要窗口句柄、但要在屏幕上显示的组件时,用这个类作为祖先类
T Wi n C o n t r o l          所有需要窗口句柄的组件,都应以该类为基类。该类提供了Wi n d o w s组件的一般属性和事件
T C u s t o m C o n t r o l          该类是从T Wi n C o n t r o l继承下来的。它具有C a n v a s属性和P a i n t ( )方法,能够控制组件的外观。也用于需要句柄的组件
T C u s t o m C l a s s N a m e        V C L中有些类的属性是不公开的,它们用来作为组件的祖先类。可以以它为祖先类创建出自定义组件,每个组件公开自己的属性
TC o m p o n e n t N a m e          一个现有的组件,譬如T E d i t、T P a n e l或T S c r o l l B o x。与其创建一个新的组件,不如扩展一个现有的组件。大部分自定义组件都是这样的

添加属性

TddgWorthless = class(TCustomControl)
private
// Internal Data Storage
FIntegerProp: Integer;
FStringProp: String;
FCharProp: Char;
published
// Simple property types
property IntegerProp: Integer read FIntegerProp write FIntegerProp;
property StringProp: String read FStringProp write FStringProp;
property CharProp: Char read FCharProp write FCharProp;
end;

加入对象型属性

TSomeObject = class(TPersistent)
private
FProp1: Integer;
FProp2: String;
public
procedure Assign(Source: TPersistent);
published
property Prop1: Integer read FProp1 write FProp1;
property Prop2: String read FProp2 write FProp2;
end;

因为该属性是一个对
象,所以必须创建该对象的实例。否则,当用户把T d d g Wo r t h l e s s组件放到窗体上时,就无法编辑这个
属性。因此,必须覆盖T d d g Wo r t h l e s s组件的C r e a t e ( )来创建T S o m e O bje c t的实例。

请注意这里覆盖了C r e a t e ( )和D e s t r o y ( )。此外,还应注意这里用了一个写访问方法S e t S o m e O b j e c t ( )
来设置S o m e O b j e c t属性的值。所谓写访问方法也可称之为写方法。相应地,读访问方法也称为读方法。
回顾一下第2 0章,写方法需要传递一个与属性同类型的参数。通常约定,写方法的名称以S e t打头。

constructor TddgWorthless.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FSomeObject := TSomeObject.Create;
end;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: