搜索导航:

常用工具: 网吧管理 | 手机工具 | 上网必备 | 图像处理 | 视频工具 | 音频工具 | MSN 专区 | 办公软件 | 行政管理 | 商业贸易 | 股票彩票

黑客软件: 入侵攻击 | 木马病毒 | 游戏外挂 | 密码破解 | 探嗅监听 | 漏洞扫描 | 在线视频 | 远程控制 | 其它黑软 | 加密解密 | 漏洞利用

新闻文章: 安全报告 | 西盟新闻 | 工具介绍 | 网络安全 | OICQ秘籍 | 免费资源 | 菜鸟文摘 | 数据安全 | 最近更新 | RSS订阅 | 菜鸟编程

 西盟网络(ZmKe.CoM)成立于2006年,经过数年发展已成为国内知名IT门户及知名域名空间运营商.我们将坚持创新.打造一流网络平台!
您当前的位置:西盟软件站菜鸟编程Delphi编程 → 文章内容

第二十章 开发Delphi对象式数据管理功能(三)

作者:佚名  来源:西盟网(zmke.com)  发布时间:2007-4-13 0:51:38

20.2.1.1 TFiler对象的属性和方法 

  1. Root属性

  声明:property Root: TComponent;

Root 属性Filer对象指出被读写的对象中哪一个对象是根或主要拥有者。RootComponentWriteRootComponent方法在读和写部件及其拥有的部件前先设置Root的值。

  2. Ancestor属性

  声明:property Ancestor: TPersistent;

Ancestor属性用于往继承下来的窗体中写部件,因为当写部件时,Write对象只需要写入与所继承的部件不同的属性,所以在写之前要跟踪每个继承的部件,并且比较它们的属性

  如果Ancestornil,就表示没有相应的继承的部件,Writer对象应当将部件完全写入流。Ancestor一般为nil,只有当调用WriteDescendantWriteDescendantRes时,才给赋值。当编写和覆盖DefineProperties时,必须设置Ancestor的值。

  3. IgnoreChildren属性

  声明:property Ignorechildren: Boolean;

IgnoreChildren属性使一个Writer对象存储部件时可以不存储该部件拥有的部件。如果IgnoreChildren属性True,则Writer对象存储部件不存它拥有的子部件。否则,Writer对象将所有其拥有的对象写入流。

  4. Create方法

  声明:constructor Create(Stream: TStream; BufSize: Cardinal);

 Create方法创建一个新的Filer对象,建立它和流Stream的联系;并且给它分配一个缓冲区BufferBuffer的大小由BufSize指定。

  5. Defineproperty方法

  声明:procedure Defineproperty(const Name: String; ReadData: TReaderProc;

WriteData: TWriterProc; HasData: Boolean); virtual; abstract;

Defineproperty方法定义Filer对象将作为属性存储的数据Name参数描述接受的属性名,该属性不在published部分定义。ReadDataWriteData参数指定在存取对象时读和写所需数据的方法。HasData参数在运行时决定了属性是否有数据要存储。

  只有当对象有数据要存储时,才在该对象的DefineProperties中调用DefinePropertyDefineProperties有一个Filer对象作为它的参数,调用的就是该Filer对象的DefinePropertyDefineBinaryProperty方法。当定义属性时,Writer对象应当引用Ancestor属性,如果该属性非空,Writer对象应当只写入与从Ancestor继承的不同的属性的值。

  一个最简单的例子是TComponentDefineProperties方法。尽管TComponent 没有在published中定义LeftTop属性,但该方法存储了部件的位置信息。

 

procedure TComponent.DefineProperties(Filer: TFiler);

begin

Filer.DefineProperty('Left', ReadLeft, WriteLeft, LongRec(FDesignInfo).Lo <> 0);

Filer.DefineProperty('Top', ReadTop, WriteTop, LongRec(FDesignInfo).Hi <> 0);

end;

 

6. DefineBinaryproperty方法

  声明:procedure DefineBinaryproperty(const Name: String;

ReadData, WriteData: TStreamProc;

HisData: Boolean); virtual; abstract;

DefineBinaryProperty方法定义Filer对象作为属性存储的二进制数据Name参数描述属性名。ReadDataWriteData参数描述所存储的对象中读写所需数据的方法。HasData参数在运行时决定属性是否有数据要存。

  DefineBinaryPropertyDefineProperty方法的不同之处在于,二进制型的属性直接用Stream对象读写,而不是通过Filer对象。通过ReadDataWriteData传入的方法,直接将对象数据写入流或从流读出。

  DefineBinaryProperty属性用得较少。只有标准的VCL对象定义了象图形、图像之类的二进制属性的部件中才用它。

  7. FlushBuffer方法

  声明:procedure FlushBuffer; virtual: abstract;

FlushBuffer方法用于使Filer对象的缓冲区与相联的Stream对象同步。对Reader对象来说,是通过重新分配缓冲区;对于Writer对象是通过写入当前缓冲区。

  FlushBuffer是一个抽象方法,TReaderTWriter都覆盖了它,提供了具体实现。

[] [返回上一页] [打 印]
其他评论:

请遵守国家法律和互联网法规。

· 您将承担一切因您的行为、言论而直接或间接导致的民事或刑事法律责任.

· 留言板管理人员有权保留或删除其管辖留言中的任意内容.

· 本站提醒:不要进行人身攻击与无聊谩骂。谢谢配合!

注意:系统启用了静态/缓存功能,您的回复可能不能立即显示。

用户名: 邮  箱  验证码: 验证码,看不清楚?请点击刷新验证码

分 值:100分 85分 70分 55分 40分 25分 10分 0分

内 容:

         (注“”为必填内容。)