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

Posted 属性

篇首语:历史和哲学负有多种永恒的责任,同时也是简单的责任。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 开发Delphi对象式数据管理功能(一)[3]相关的知识,希望对你有一定的参考价值。

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

  function TStream ReadComponentRes(Instance: TComponent) TComponent;

  begin

  ReadResHeader;

  Result := ReadComponent(Instance)

  end;

  与ReadComponentRes相应的写方法是WriteComponentRes Delphi 调用这两个方法读写窗体文件(DFM文件) 在后面书中会举用这两个方法读取DFM文件的例子

  ⑷ WriteComponent和WriteDescendant方法

  Stream对象的WriteDescendant方法在实现过程中 创建了riter对象 然后利用riter的WriteDescendant方法将Instance写入流 而WriteComponent方法只是简单地调用WriteDescendant方法将Instance写入流 它们的实现如下

  procedure TStream WriteComponent(Instance: TComponent)

  begin

  WriteDescendent(Instance nil)

  end;

  procedure TStream WriteDescendent(Instance Ancestor: TComponent)

  var

  Writer: riter;

  begin

  Writer := riter Create(Self )

  try

  Writer WriteDescendent(Instance Ancestor)

  finally

  Writer Free;

  end;

  end;

  ⑸ WriteDescendantRes和WriteComponentRes方法

  WriteDescendantRes方法用于将部件写入Windows资源文件 而WriteComponentRes 方法只是简单地调用WriteDescendantRes方法 它们的实现如下

  procedure TStream WriteComponentRes(const ResName: string; Instance:

  TComponent)

  begin

  WriteDescendentRes(ResName Instance nil)

  end;

  procedure TStream WriteDescendentRes(const ResName: string; Instance

  Ancestor: TComponent)

  var

  HeaderSize: Integer;

  Origin ImageSize: Longint;

  Header: array[ ] of Char;

  begin

  Byte((@Header[ ])^) := $FF;

  Word((@Header[ ])^) := ;

  HeaderSize := StrLen(StrUpper(StrPLCopy(@Header[ ] ResName ))) + ;

  Word((@Header[HeaderSize ])^) := $ ;

  Longint((@Header[HeaderSize ])^) := ;

  WriteBuffer(Header HeaderSize)

  Origin := Position;

  WriteDescendent(Instance Ancestor)

  ImageSize := Position Origin;

  Position := Origin ;

  WriteBuffer(ImageSize SizeOf(Longint))

  Position := Origin + ImageSize;

  end;

  WriteCompnentRes是与ReadComponentRes相应的对象写方法 这两个方法相互配合可读取Delphi的DFM文件 从而利用Delphi系统的功能

   THandleStream对象

  THandleStream对象的行为特别象FileStream对象 所不同的是它通过已创建的文件句柄而不是文件名来存储流中的数据

  THandleStream对象定义了Handle属性 该属性提供了对文件句柄的只读访问 并且Handle属性可以作为Delphi的RTL文件管理函数的参数 利用文件类函数来读写数据 THandleStream覆蓋了构造函数Create 该函数带有Handle 参数 该参数指定与THandleStream对象相关的文件句柄

   THandleStream的属性的方法

   Handle属性

  声明

property Handle: Integer;

  Handle属性提供了对文件句柄的只读访问 该句柄由THandleStream的构造方法Create传入 因此除了用THandleStream提供的方法外 也可以用文件管理函数对句柄进行操作 实际上 THandleStream的方法在实现上也是运用文件管理函数进行实际的读写操作

   Create方法

  声明

constructor Create(AHandle: Integer)

  Create方法使用传入的Handle参数创建一个与特定文件句柄相联的THandleStream对象 并且将AHandle赋给流的Handle属性

   Read Write和Seek方法

  这三个方法是TStream的虚方法 只是在THandleStream 中覆蓋了这三个方法 以实现特定媒介──文件的数据存取 后面会详细介绍这三个方法的实现

   THandleStream的实现原理

  THandleStream是从TStream继承来的 因此可以共用TStream中的属性和大多数方法 THandleStream在实现上主要是增加了一个属性Handle和覆蓋了Create Read Write和Seek四个方法

   属性的实现

  Handle属性的实现正如Delphi大多数属性的实现那样 先在对象定义的private部分声明一个存放数据的变量FHandle 然后在定义的public部分声明属性Handle 其中属性定义的读写控制部分加上只读控制 读控制只是直接读取FHandle变量的值 其实现如下

  THandleStream = class(TStream)

  private

  FHandle: Integer;

  public

  …

  property Handle: Integer read FHandle;

  end;

   方法的实现

  THandleStream的Create方法 以AHandle作为参数 在方法里面只是简单的将AHandle的值赋给FHandle 其实现如下

  constructor THandleStream Create(AHandle: Integer)

  begin

  FHandle := AHandle;

  end;

  为实现针对文件的数据对象存储 THandleStream的Read Write和Seek方法覆蓋了TStream中的相应方法 它们的实现都调用了Windows的文件管理函数

  Read方法调用FileRead函数实现文件读操作 其实现如下

  function THandleStream Read(var Buffer; Count: Longint) Longint;

  begin

  Result := FileRead(FHandle Buffer Count)

  if Result = then Result := ;

  end;

  Write方法调用FileWrite函数实现文件写操作 其实现如下

cha138/Article/program/Delphi/201311/25106

相关参考

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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