手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>delphi>列表

开发Delphi对象式数据管理功能(十)

来源:互联网 作者:west263.com 时间:2008-02-23
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

var

In, Out: TStream;

begin

In := TMemoryStream.Create;

Out := TMemoryStream.Create;

try

ScriptForm.ScriptEdit.Lines.SaveToFromStream(In);

ObjectTextToResource(In, out);

In.ReadComponentRes(DesignWin);

finally

In.Free;

Out.Free;

end;

end;

 

  这两段程序是对整个卡片,即窗体级,进行转换的。ObjectBinaryToTextObjectTextToBinary过程可以细化到部件级的转换。因此超媒体脚本语言的编辑可以细化到媒体对象级。

  4. 超媒体编辑和表现系统与动态DFM文件的扩展

  超媒体系统的媒体编辑与卡片管理有其特殊的需求,比如链接需求。这时采用已有的窗体部件和媒体部件并按常规的DFM文件处理就显得力不从心了。解决这个矛盾有两套方案:

  利用Delphi部件开发技术,继承和开发新的部件增加新的超媒体特有的属性和处理方法

  ● 扩展DFM文件结构,使之能按自己的需要任意地存取和转换部件和DFM文件

 

  前者是充分利用Delphi的面向对象部件开发技术,在存取和转换等处理上仍旧与常规DFM文件相同。而后者需要DFM的存取和转换上作比较大的改动。下文介绍扩展DFM文件的思路。

  扩展动态DFM文件的总体思路是降低处理操作的数据的颗粒度,即从原先窗体级降低到部件级。

  下面是存取操作的扩展示范:

 

  var

FileStream: TStream;

I: Integer;

begin

FileStream := TFileStream.Create('OverView.Crd', fmOpenWrite);

With TWriter.Create(FileStream, 4096) do

try

for I := 0 to DesignWin.ControlCount - 1 do

begin

WriteInteger(MMID[i]);

WriteRootComponent(DesignWin.Controls[i]);

{ 写相应媒体扩展信息 }

  ……

   end;

WriteListEnd;

finally.

Free;

end;

FileStream.Free;

end;

 

WriteInteger(MMID[i])语句是写入媒体标识。

  下面是相应的读扩展DFM的程序:

 

  var

PropInfo: PPropInfo;

Method : TMethod;

FileStream: TStream;

I: Integer;

begin

FileStream := TFileStream.Create('OverView.Crd', fmOpenRead);

With TReader.Create(FileStream, 4096) do

try

while not EndOfList do

begin

case ReadInteger of

IDText: begin

Ctrl := TControl(ReadRootComponent(nil));

PropInfo := GetPropInfo(Ctrl.ClassInfo, 'OnClick');

Method.Code:= Self.MethodAddress(MethodName);

Method.Data := Self;

if Method.Code <> nil then

SetMethodProp(Ctrl, PropInfo, Method);

DesignWin.InsertControl(Ctrl);

end;

IDImage:

  ……

  end;

   ……

WriteListEnd;

end;

finally.

Free;

end;

FileStream.Free;

end;

 

  SetMethodProp过程是用于重新联接控制和它的事件处理过程。类似的功能还可以用TReader对象的OnFindMethod事件的处理过程来实现。

  实现脚本语言扩展的基本方法与存取扩展类似,但它还要加扩展媒体信息转换为文本,并插入到部件的脚本描述中。

 

20.3.2 数据库BLOB字段应用

 

  Delphi VCL提供了

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!