知识大全 开发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基础教程:开发Delphi对象式数据管理功能(三)[3] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快
DELPHI基础教程:开发Delphi对象式数据管理功能(三)[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快
DELPHI基础教程:开发Delphi对象式数据管理功能(一)[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快
DELPHI基础教程:开发Delphi对象式数据管理功能(二)[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快
DELPHI基础教程:开发Delphi对象式数据管理功能(四)[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快
DELPHI基础教程:开发Delphi对象式数据管理功能(五)[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快
DELPHI基础教程:开发Delphi对象式数据管理功能(一)[3] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快
DELPHI基础教程:开发Delphi对象式数据管理功能(二)[4] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快
DELPHI基础教程:开发Delphi对象式数据管理功能(一)[5] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快
DELPHI基础教程:开发Delphi对象式数据管理功能(一)[4] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快