第二十章开发delphi对象式数据管理功能一内容摘要:

Longint。 var Pos: Longint。 begin Pos := Seek(0, 1)。 Result := Seek(0, 2)。 Seek(Pos, 0)。 end。 2. TStream 方法的实现 ⑴ CopyFrom 方法 CopyFrom 是 Stream 对象中很有用的方法,它用于在不同存储媒介中拷贝数据。 例如,内存与外部文件 之间、内存与数据库字段之间等。 它简化了许多内存分配、文件打开和读写等的细节,将所有拷贝操作都统一到 Stream 对象上。 前面曾介绍: CopyFrom 方法带 Source 和 Count 两个参数并返回长整型。 该方法将 Count 个字节的内容从 Source 拷贝到当前流中,如果 Count 值为 0则拷贝所有数据。 function (Source: TStream。 Count: Longint): Longint。 const MaxBufSize = $F000。 var BufSize, N: Integer。 Buffer: PChar。 begin if Count = 0 then begin := 0。 CouNG=ZHCN资源文件中的部件时调用,通常程序员不需自己调用。 如果读取的不是资源文件 ReadResHeader,将触发异常事件。 procedure。 var ReadCount: Longint。 Header: array[0..79] of Char。 begin FillChar(Header, SizeOf(Header), 0)。 ReadCount := Read(Header, SizeOf(Header) 1)。 if (Byte((@Header[0])^) = $FF) and (Word((@Header[1])^) = 10) then Seek(StrLen(Header + 3) + 10 ReadCount, 1) else raise (SInvalidImage)。 end。 ReadComponentRes 在 Windows 资源文件中读取部件,为了判断是否是资源文件,它首先调用 ReadResHeader 方法,然后调用 ReadComponent 方法读取 Instance 指定的部件。 下面是它的实现: function (Instance: TComponent): TComponent。 begin ReadResHeader。 Result := ReadComponent(Instance)。 end。 与 ReadComponentRes 相应的写方法是 WriteComponentRes, Delphi 调用这两个方法读写窗体文件 (DFM 文件 ),在后面书中会举用这两个方法读取 DFM文件的例子。 ⑷ WriteComponent 和 WriteDescendant 方法 Stream 对象的 WriteDescendant 方法在实现过程中,创建了 TWriter 对象,然后利用 TWriter 的 WriteDescendant 方法将 Instance 写 入 流。 而WriteComponent 方法只是简单地调用 WriteDescendant 方法将 Instance 写入流。 它们的实现如下: procedure (Instance: TComponent)。 begin WriteDescendent(Instance, nil)。 end。 procedure (Instance, Ancestor: TComponent)。 var Writer: TWriter。 begin Writer := (Self, 4096)。 try (Instance, Ancestor)。 finally。 end。 end。 ⑸ WriteDescendantRes 和 WriteComponentRes 方法 WriteDescendantRes 方法用于将部件写入 Windows 资源文件;而WriteComponentRes 方法只是简单地调用 WriteDescendantRes 方法,它们的实现如下: procedure (const ResName: string。 Instance: TComponent)。 begin WriteDescendentRes(ResName, Instance, nil)。 end。 procedure (const ResName: string。 Instance, Ancestor: TComponent)。 var HeaderSize: Integer。 Origin, ImageSize: Longint。 Header: array[0..79] of Char。 begin Byte((@Header[0])^) := $FF。 Word((@Header[1])^) := 10。 HeaderSize := StrLen(StrUpper(StrPLCopy(@Header[3], ResName, 63))) + 10。 Word((@Header[HeaderSize 6])^) := $1030。 Longint((@Header[HeaderSize 4])^) := 0。 WriteBuffer(Header, HeaderSize)。 Origin := Position。 WriteDescendent(Instance, Ancestor)。 ImageSize := Position Origin。 Position := Origin 4。 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 的属性的方法: 1. Handle 属性 声明: property Handle: Integer。 Handle 属性提供了对文件句柄的只读访问,该句柄由 THandleStream 的构造方法 Create 传入。 因此除了用 THandleStream 提供的方法外,也可以用文件管理函数对句柄进行操作。 实际上, THandleStream 的方法在实现上也是运用文件管理函 数进行实际的读写操作。 2. Create 方法 声明: constructor Create(AHandle: Integer)。 Create 方法使用传入的 Handle 参数创建一个与特定文件。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。