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

Posted

篇首语:粉丝对我来说都是浮云,所以我很喜欢多云的天气。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 开发Delphi对象式数据管理功能(一)[2]相关的知识,希望对你有一定的参考价值。

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

  Stream对象的WriteComponent方法声明是这样的

  procedure WriteComponent(Instance: Tponent)

  WriteComponent创建一个Writer对象 并调用Writer的WriteRootComponent方法将Instance及其拥有的对象写入流

   WriteComponentRes方法

  声明

WriteComponentRes(const ResName: String; Instance: TComponent)

  WriteComponentRes方法首先往流中写入标准Windows 资源文件头 然后将Instance指定的部件写入流中 要读由WriteComponentRes写入的部件 必须调用ReadComponentRes方法

  WriteComponentRes使用ResName传入的字符串作为资源文件头的资源名 然后调用WriteComponent方法将Instance和它拥有的部件写入流

   WriteDescendant方法

  声明

procedure WriteDescendant(Instance Ancestor: TComponent)

  Stream对象的WriteDescendant方法创建一个Writer对象 然后调入该对象的WriteDescendant方法将Instance部件写入流中 Instance可以是从Ancestor部件继承的窗体 也可以是在从祖先窗体中继承的窗体中相应于祖先窗体中Ancestor部件的部件

   WriteDescendantRes方法

  声明

procedure WriteDescendantRes(const ResName: String;Instance Ancestor: TComponent)

  WriteDescendantRes方法将Windows资源文件头写入流 并使用ResName作用资源名 然后调用WriteDescendant方法 将Instance写入流

   TStream的实现原理

  TStream对象是Stream对象的基础类 这是Stream对象的基础 为了能在不同媒介上的存储数据对象 后继的Stream对象主要是在Read和Write方法上做了改进 因此 了解TStream是掌握Stream对象管理的核心 Borland公司虽然提供了Stream对象的接口说明文档 但对于其实现和应用方法却没有提及 笔者是从Borland Delphi Client/Server Suite 提供的源代码和部分例子程序中掌握了流式对象技术

  下面就从TStream的属性和方法的实现开始

   TStream属性的实现

  前面介绍过 TStream具有Position和Size两个属性 作为抽象数据类型 它抽象了在各种存储媒介中读写数据所需要经常访问的域 那么它们是怎样实现的呢?

  在自定义部件编写这一章中介绍过部件属性定义中的读写控制 Position和Size也作了读写控制 定义如下

  property Position: Longint read GetPosition write SetPosition;

  property Size: Longint read GetSize;

  由上可知 Position是可读写属性 而Size是只读的

  Position属性的实现就体现在GetPosition和SetPosition 当在程序运行过程中 任何读取Position的值和给Position赋值的操作都会自动触发私有方法GetPosition和SetPosition 两个方法的声明如下

  function TStream GetPosition: Longint;

  begin

  Result := Seek( )

  end;

  procedure TStream SetPosition(Pos: Longint)

  begin

  Seek(Pos )

  end;

  在设置位置时 Delphi编译机制会自动将Position传为Pos

  前面介绍过Seek的使用方法 第一参数是移动偏移量 第二个参数是移动的起点 返回值是移动后的指针位置

  Size属性的实现只有读控制 完全屏蔽了写操作 读控制方法GetSize实现如下

  function TStream GetSize: Longint;

  var

  Pos: Longint;

  begin

  Pos := Seek( )

  Result := Seek( )

  Seek(Pos )

  end;

   TStream方法的实现

  ⑴ CopyFrom方法

  CopyFrom是Stream对象中很有用的方法 它用于在不同存储媒介中拷贝数据 例如 内存与外部文件之间 内存与数据库字段之间等 它简化了许多内存分配 文件打开和读写等的细节 将所有拷贝操作都统一到Stream对象上

  前面曾介绍 CopyFrom方法带Source和Count两个参数并返回长整型 该方法将Count个字节的内容从Source拷贝到当前流中 如果Count值为 则拷贝所有数据

  function TStream CopyFrom(Source: TStream; Count: Longint) Longint;

  const

  MaxBufSize = $F ;

  var

  BufSize N: Integer;

  Buffer: PChar;

  begin

  if Count = then

  begin

  Source Position := ;

  CouNG= ZH CN >资源文件中的部件时调用 通常程序员不需自己调用 如果读取的不是资源文件ReadResHeader 将触发异常事件

  procedure TStream ReadResHeader;

  var

  ReadCount: Longint;

  Header: array[ ] of Char;

  begin

  FillChar(Header SizeOf(Header) )

  ReadCount := Read(Header SizeOf(Header) )

  if (Byte((@Header[ ])^) = $FF) and (Word((@Header[ ])^) = ) then

  Seek(StrLen(Header + ) + ReadCount )

  else

  raise EInvalidImage CreateRes(SInvalidImage)

  end;

  ReadComponentRes在Windows资源文件中读取部件 为了判断是否是资源文件 它首先调用ReadResHeader方法 然后调用ReadComponent方法读取Instance指定的部件 下面是它的实现

cha138/Article/program/Delphi/201311/25105

相关参考

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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