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