您的位置:首页 > 运维架构

__property TBitmap* Bitmap = {read=GetBitmap, write=SetBitmap}; __property的用法

2009-03-05 11:25 120 查看
__property   TBitmap*   Bitmap   =   {read=GetBitmap,   write=SetBitmap};

即为某个类(Class)定义一个属性(Property),而对于属性的操作则分为两种,一种获取(Get)或者叫作读取(Read)操作,另一种是设置(Set)或者叫作写入(Write)操作,这些操作就在后等号(=)后而的花括号('{'&'}')里面声明。read表示读取操作,write表示设置该属性的操作,用等号(=)分隔开后接着就是对应该操作的数据变量、过程(设置采用过程,返回值为void,带至少一个参数,参数的类型即该属性的类型)或函数(对应读取操作,返回值为该属性的数据类型,参数为零个或多个)。同时还可以为属性编辑器添加一个默认值 (nodefault   or   default=DefaultInitializeValue,默认值通常是一个常量值,对于能否使用函数本人不曾了解,楼主可以查阅相关文档)。

例如:
class   TA   :public   TParentClass
{
private:
int   FLeft;
//属性数据存储变量放至私有域,
//如此可以起到保护数据的作用,
//比如此例当中的Left是一个属性,
//当Left值改变之后,
//那么相应的该对象的位置(Position)
//也需要相应起变化。
//而当数据放到public当中时,
//外部对象就可以直接对该变量的值
//那么该对象相应的实际位置,
//由于未得到改变的通知(没有通知入口)
//而未改变,如此就导致属性错乱
//而把它放到私有域当中,
//那么外部对象就不能直接操作

void   __fastcall   SetLeft(const   int   Value);
//另外给出一个属性(property)接口
//给外部进行设置,
//而属性接口当中的设置则设立一个过程SetLeft来作处理,
//在修改Left属性值的同时主要是修改实际的位置(position)
protected:
public:
__property   int   Left   =   {read=FLeft   /*直接读取私有域当中FLeft的值*/,
write=SetLeft   /*通过过程SetLeft对FLeft进行设置*/,
default=0   /*属性编辑器默认赋值为0*/   };
};

//SetLeft过程
void   __fastcall   TA::SetLeft(const   int   Value)
{
try
{
//改变实际位置
SetPosition(Value   /*Left,-1   As   NoChange*/,
-1         /*Top,-1   As   NoChange*/,
-1         /*Width,-1   As   NoChange*/,
-1         /*Height,-1   As   NoChange*/);
}
catch(...)
{
//调整位置失败,则不改变属性值
return;
}
FLeft=Value;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: