| 网站首页 | JAVA文章 | AppServers | Web开发 | 应用开发 | 资源下载 | 论坛
    想学好编程,学好外语很重要  [enadd  2006年12月25日]        
设为首页 加入收藏 联系站长
您现在的位置: 编程笔记网 >> 应用开发 >> delphi >> 基础教程 >> 文章正文
第二十章 开发Delphi对象式数据管理功能(三)            【字体:
第二十章 开发Delphi对象式数据管理功能(三)
作者:不祥    文章来源:-    点击数:    更新时间:2006-12-12

20.2.1.1 TFiler对象的属性和方法 

  1. Root属性

  声明:property Root: TComponent;

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

  2. Ancestor属性

  声明:property Ancestor: TPersistent;

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

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

  3. IgnoreChildren属性

  声明:property Ignorechildren: Boolean;

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

  4. Create方法

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

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

  5. Defineproperty方法

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

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

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

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

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

 

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参数描述属性名。ReadData和WriteData参数描述所存储的对象中读写所需数据的方法。HasData参数在运行时决定属性是否有数据要存。

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

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

  7. FlushBuffer方法

  声明:procedure FlushBuffer; virtual: abstract;

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

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

 

20.2.1.2 TFiler对象的实现原理

 

  TFiler对象是Filer对象的基础类,它定义的大多数方法都是抽象类型的,没有具体实现它,这些方法要在TReader和TWrite中覆盖。但它们提供了Filer对象的框架,了解它无疑是很重要的。

  1. TFiler对象属性的实现

  TFiler对象定义了三个属性:Root、Ancestor和IgnoreChildren。正如定义对象属性通常所采用的方法那样,要在private部分定义存储属性值的数据域,然后在public或Published部分定义该属性,并按需要增加读写控制。它们的定义如下:

[1] [2] [3] [4] [5] [6] 下一页  

文章录入:enadd    责任编辑:enadd 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
  • 第二十章 开发Delphi对象式…

  • 第二十章 开发Delphi对象式…

  • 第二十章 开发Delphi对象式…

  • 第二十章 开发Delphi对象式…

  • 第十九章 Delphi自定义部件…

  • 第十九章 Delphi自定义部件…

  • 第十九章 Delphi自定义部件…

  • 第十九章 Delphi自定义部件…

  • 第十八章 Delphi客户服务器…

  • 第十八章 Delphi客户服务器…

  •   网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 管理登录 |