知识大全 开发Delphi对象式数据管理功能(三)[1]

Posted 属性

篇首语:三更灯火五更鸡,正是男儿读书时。黑发不知勤学早,白首方悔读书迟。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 开发Delphi对象式数据管理功能(三)[1]相关的知识,希望对你有一定的参考价值。

DELPHI基础教程:开发Delphi对象式数据管理功能(三)[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

   TFiler对象的属性和方法

   Root属性

  声明

property Root: TComponent;

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

   Ancestor属性

  声明

property Ancestor: TPersistent;

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

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

   IgnoreChildren属性

  声明

property Ignorechildren: Boolean;

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

   Create方法

  声明

constructor Create(Stream: TStream; BufSize: Cardinal)

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

   Defineproperty方法

  声明

procedure Defineproperty(const Name: String; ReadData: TReaderProc;WriteData: riterProc; 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 <> )

  Filer DefineProperty( Top ReadTop WriteTop LongRec(FDesignInfo) Hi <> )

  end;

   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对象定义了象图形 图像之类的二进制属性的部件中才用它

   FlushBuffer方法

  声明

procedure FlushBuffer; virtual: abstract;

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

  FlushBuffer是一个抽象方法 TReader和riter都覆蓋了它 提供了具体实现

   TFiler对象的实现原理

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

   TFiler对象属性的实现

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

  TFiler = class(TObject)

  private

  …

  FRoot: TComponent;

  FAncestor: TPersistent;

  FIgnoreChildren: Boolean;

  public

  …

  property Root: TComponent read FRoot write FRoot;

  property Ancestor: TPersistent read FAncestor write FAncestor;

  property IgnoreChildren: Boolean read FIgnoreChildren write FIgnoreChildren;

  end;

  它们在读写控制上都是直接读写私有的数据域

  在介绍TReader和riter的实现 我们还会看到这几个属性的原理介绍

   TFiler对象方法的实现

  在TFiler对象定义的众多方法中很多都是抽象类方法 没有具体实现 在TFiler 的后继对象TReader中覆蓋了这些方法 在后面章节 会介绍这些方法的实现

  在TFiler对象中有具体实现的有两个方法Create和Destroy

  ⑴ Create方法的实现

  Create方法是TFiler的构造方法 它有两个参数Stream和BufSize Stream是指定与TFiler对象相联系的Stream对象 Filer对象都是用Stream对象完成具体的读写 BufSize是TFiler对象内部开设的缓冲区的大小 Filer对象内部开设缓冲区是为了加快数据的读写 它的实现如下

  constructor TFiler Create(Stream: TStream; BufSize: Integer)

  begin

  FStream := Stream;

  GetMem(FBuffer BufSize)

  FBufSize := BufSize;

  end;

  FStream FBuffer和FBufSize都是TFiler在private部分定义的数据域 FStream表示与Filer对象相联的Stream对象 FBuffer指向Filer对象内部开设的缓冲区 FBufSize是内部缓冲区的大小 Create方法用Stream参数值给FStream赋值 然后用GetMem分配BufSize大小的动态内存作为内部缓冲区

cha138/Article/program/Delphi/201311/25096

相关参考

知识大全 开发Delphi对象式数据管理功能(三)[3]

DELPHI基础教程:开发Delphi对象式数据管理功能(三)[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快

知识大全 开发Delphi对象式数据管理功能(三)[2]

DELPHI基础教程:开发Delphi对象式数据管理功能(三)[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快

知识大全 开发Delphi对象式数据管理功能(一)[1]

DELPHI基础教程:开发Delphi对象式数据管理功能(一)[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快

知识大全 开发Delphi对象式数据管理功能(二)[1]

DELPHI基础教程:开发Delphi对象式数据管理功能(二)[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快

知识大全 开发Delphi对象式数据管理功能(四)[1]

DELPHI基础教程:开发Delphi对象式数据管理功能(四)[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快

知识大全 开发Delphi对象式数据管理功能(五)[1]

DELPHI基础教程:开发Delphi对象式数据管理功能(五)[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快

知识大全 开发Delphi对象式数据管理功能(一)[3]

DELPHI基础教程:开发Delphi对象式数据管理功能(一)[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快

知识大全 开发Delphi对象式数据管理功能(二)[4]

DELPHI基础教程:开发Delphi对象式数据管理功能(二)[4]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快

知识大全 开发Delphi对象式数据管理功能(一)[5]

DELPHI基础教程:开发Delphi对象式数据管理功能(一)[5]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快

知识大全 开发Delphi对象式数据管理功能(一)[4]

DELPHI基础教程:开发Delphi对象式数据管理功能(一)[4]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快