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