第二十章 开辟Delphi对象式数据管理功效(五)[Delphi编程]
本文“第二十章 开辟Delphi对象式数据管理功效(五)[Delphi编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
20.3.1.1写DFM文件的历程:WriteComponentResFie
该历程带有两个参数FileName和Instance.FileName参数指定要写入的DFM文件名,Instance参数是TComponent范例的,它指定要写入的部件名,普通是TForm对象的子类.该历程将Instance部件和其拥有的全部部件写入DFM文件.
这个历程的意义在于,可以在程序运行历程中产生Delphi的窗体部件和在窗体中插入部件,并由该函数将窗体写入DFM文件,支持了动态DFM文件的重用性.
该历程的程序是这样的:
procedure WriteComponentResFile(const FileName: string; Instance: TComponent);
var
Stream: TStream;
begin
Stream := TFileStream.Create(FileName, fmCreate);
try
Stream.WriteComponentRes(Instance.ClassName, Instance);
finally
Stream.Free;
end;
end;
函数中,用FileStream成立文件,用Stream对象的WriteComponetRes办法将Instance写入流中.
20.3.1.2 读DFM文件的函数:ReadComponentResFile
ReadComponentResFile函数带有两个参数FileName和Instance.FileName参数指定要读DFM文件名,Instance参数指定从DFM文件中要读的部件.该函数从DFM文件中将Instance和它拥有的全部部件,并返回该部件.
这个函数的意义在于,配合WriteComponentResFile历程的利用支持DFM文件的重用性.
该函数的程序是这样的:
function ReadComponentResFile(const FileName: string; Instance: TComponent):
TComponent;
var
Stream: TStream;
begin
Stream := TFileStream.Create(FileName, fmOpenRead);
try
Result := Stream.ReadComponentRes(Instance);
finally
Stream.Free;
end;
end;
程序中利用FileStream对象翻开由FileName指定的DFM文件,然后用Stream对象的ReadComponentRes办法读出Instance,并将读的后果作为函数的返回值.
20.3.1.3 读取Delphi利用程序资源中的部件
函数InternalReadComponentRes可以读取Delphi利用程序资源中的部件.Delphi 的DFM文件在程序经过编译链接后被嵌入利用程序的资源中,并且格局发生了改变,即少了资源文件头.
在第一节中曾经介绍过TResourceStream对象,该对象是操作资源媒介上的数据的.函数InternalReadComponentRes用了TResourceStream.程序是这样的:
function InternalReadComponentRes(const ResName: string;
var Instance: TComponent): Boolean;
var
HRsrc: THandle;
begin { 避免"EResNotFound"非常事件的呈现 }
HRsrc := FindResource(HInstance, PChar(ResName), RT_RCDATA);
Result := HRsrc <> 0;
if not Result then Exit;
FreeResource(HRsrc);
with TResourceStream.Create(HInstance, ResName, RT_RCDATA) do
try
Instance := ReadComponent(Instance);
finally
Free;
end;
Result := True;
end;
HInstance是一个Delphi VCL定义的全局变量,代表当前利用程序的句柄.函数用了资源拜候API函数FindResource来测定能否存在ResName所描写资源.因为在TResourceStream的成立历程还有FindResource等操作,所以函数中调用了FreeResource.最后函数调用了Stream对象的ReadComponent办法读出部件.因为函数的Instance是var范例的参数,所以可以拜候Instance,得到读出的部件.
以上是“第二十章 开辟Delphi对象式数据管理功效(五)[Delphi编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |