说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

DELPHI中DFM文件与文本文件转换

HTML文档下载 WORD文档下载 PDF文档下载
DELPHI中DFM文件与文本文件转换

在Delphi可视化设计环境中,允许程序员在代码编辑器中以文本的方式浏览和修改DFM文件内容。当用File/Open命令直接打开DFM文件或者选择窗体设计窗口的弹出式菜单上的View as Text命令时,就会在编辑器中出现文本形式的信息。在一些资料中将这种文本形式称之为窗体设计脚本。Delphi提供的这种脚本编辑功能是对Delphi可视化设计的一大补充。当然这个脚本编辑能力是有限制的,比方说不能在脚本任意地添加和删除部件,因为代码和DFM脚本是紧密相连的,任意添加和修改会导致不一致性。但在动态生成的DFM文件中,就不存在这一限制。

实际上,DFM文件内容是二进制数据,它的脚本是经过Delphi开发环境自动转化的,而且Delphi VCL中的Classes库单元提供了在二进制流中的文件DFM和它的脚本之相互转化的过程。它们是ObjectBinaryToText和ObjectTextToBinary、ObjectResourceToText和ObjectTextToResource。

ObjectBinaryToText过程将二进制流中存储的部件转化为基于文本的表现形式,这样就可以用文本处理函数进行处理,还可以用文本编辑器进行查找和替代操作,最后可以将文本再转化成二进制流中的部件。

ObjectTextToBinary过程执行的功能与ObjectBinaryToText相反,将TXT文件转换为二进制流中的部件,而且只要TXT文件内容的书写符合DFM脚本语法,ObjectTextToBinary可将任何程序生成的TXT文件转换为部件,这一功能也为DFM文件的动态生成和编辑奠定了基础。

DFM文件与DFM脚本语言之间相互转换的任务由ObjectResourceToText和ObjectTextToResource两个过程完成。下面以我所拥有的Delphi编程资料作详细说明:

ObjectResourseToText过程比较简单,如下:

procedure ObjectResourceToText(Input

Output:TStream);

begin

Input.ReadResHeader;

ObjectBinaryToText(Input

Output);

end;

ObjectTextToResource过程就比较复杂,因为DFM文件资源头中要包含继承标志信息,因此在调用ObjectTextToBinary后,就读取标志信息,然后写入资源头。

procedure ObjectTextToResource(Input

Output:TStream);

var

Len:Byte;

Tmp:Longint;

MemoryStream:TMemoryStream;

MemorySize:Longint;

Header:array[0.79] of Char;

begin

MomoryStream:=TMemoryStream.Create;

try

ObjectTextToBinary(Input

MemoryStream);

MemorySize:=MemoryStream.Size;

FillChar(Header

SizeOF(Header)

0);

MemoryStream.Position:=SizeOf(Longint);{Skip header}

MemoryStream.Read(Len

1);

if Len and $F0=$F0 then

begin

if ffChildPos in TFilerFlags(Len and $F0) then

begin

MemoryStream.Read(Len

1);

case TValueType(Len) of

vaInt8:Len:=1;

vaInt16:Len=2;

vaInt32:Len=4;

end;

MemoryStream.Read(Tmp

Len);

end;

MemoryStream.Read(Len

1);

end;

MemoryStream.Read(Header[3]

Len);

StrUpper(@Header[3]);

Byte((@Header[0])^):=$FF;

Word((@Header[1])^):=10;

Word((@Header[Len+4])^):=$1030;

Longint((@Header[Len+6])^):=MemorySize;

Output.Write(Header

Len+10);

Output.Write(MemoryStream.Memory^

MemorySize);

finally

MemoryStream.Free;

end;

VB如何在 VB 中使用 Winzip 来压缩文件? VB如何在DOS程序结束执行时,自动将其关闭? VB如何在VB中实现Undo(撤消)功能? VB如何在VB中实现目录遍历 VB如何在Windows操作系统中改变文件打开方式 VB如何知道硬盘是使用那一种文件系統(FAT32,FAT16)? VB如何自动更动成中文输入 VB删除整个目录 VB设置打印页边距 VB实现文件查找功能 VB使用SendMessage函数滚动文本框控件中的内容 VB使用 WIN95 的选择目录对话框 VB使用INI文件 VB使用WriteFile 块读写数据 VB使用历史文件记录 VB使用内存映射文件加快文件操作速度 VB数据报表设计器在多层结构开发的应用 VB突破 TextBox 32K 的限制 VB拖拽节点时实现目录树自动翻滚 位图文件内部初探-VB资料 VB文本的加密与解密 VB显示盘中所有的目录 VB压缩MDB文件 一个移动文件的简单方法-VB资料 VB移动文件到回收站 VB隐藏文本框控件的环境菜单(又一方法) VB隐藏文本框控件的环境菜单 VB用API复制移动文件 VB用OleDragdrop事件接受拖放文件 用VB进行文本文件的再处理 用VB开发应用程序如何使用INI文件 在自己的机器上打不开联接 DataModule的问题(菜鸟级) 怎么把表中的列约束为唯一的? 一个编程论坛 从没见过的问题!!!晕了!! 安装问题,请指教! C++的应用是什么意思呢? 得到上传文件大小的问题,解决高分相送!! R6中的问题!高手请进!高分求救! 一个电子书籍下载和编程论坛 请问怎么在vb中调用纯c接口的api并实现多线程 如何在一个很大的文件中删除一段数据?不用拷贝的方法 the C++ programing language里的两个小问题!!! 找在没行带checkbutton的listbox控件类 我可怜的QQ被盗了~~有什么密码破译软件取回QQ的密码吗 VARIANT结构中,如何通过pvarVal指针来获得串口传来的二进制流?? 天啊,这就是《程序员》? 编译java程序需要哪些工具,菜鸟提问. how to use *.pak?? ★在数据窗口中如何同时实现多行操作,如update或delete多行。 请问oracle8i的下载问题! 请问MSDN.net 中文版光盘出了吗??????????????????????? 关于STRING的问题 在IE中程序运行有错误?请指点! JB8做个BMP,奇怪问题 有谁知道*.dns用什么软件打开吗,急!!! 大家给我推荐一个delphi源码网站 Oracle8.17的安装问题,请大家帮忙,急呀!谢谢! csv文件存储求助 问个关于checkboxlist控件的用法! 客户端通过Session Bean 调用 Local EntityBean的问题. 启动j2ee的问题--j2ee -verbose 那里能够下载破解的install shield 5.0 or 5.5 or 6.0? 我想搞网络游戏开发,请教各位的意见 如何在接受表单的ASP文件中,去知晓是这个表单中的哪个'确认按钮'被按下了?? 我的数据库打不开了!!! 连接MySQL数据库服务器? 有谁可以推荐几个国外的比较热的asp论坛,多谢! 我是一个菜鸟,想学asp,希望前辈给指条路 有人知道工程硕士是怎么回事吗?和普通的有什么不同啊,可以考普通的博士吗?谢谢阿 access数据库为何备份出错? 有了主键,还需要建立索引吗?解决送分。 在Oracle的逻辑数据库结构中有个概念叫"范围"的是什么意思呀? 能将javascript改写成其它语言吗? 为什么动态创建的控件不能保存? HelpProvider控件的问题 如何把几个dbf表中的数据导到一个表中? 软件汉化有几种方法呢? 各位大虾,求助,在线急等! 看看我能放多少分.... 急啊,我刚买的电脑就出问题了~~~~ 美媒:安倍讲话相当于给中国人“当面一安倍:为世界贡献途径之一是在亚洲抗衡美媒:安倍把日本带向一个不屈服于美国斯里兰卡庆祝科伦坡国际机场高速路建成外媒关注《新快报》为“记者门”事件道美报报道 北京推“自住型商品房”稳定外媒报道中日论坛因钓岛引发“语言冲突美国“天翼掠过休斯敦”航空展揭幕韩独岛宣传片涉嫌非法引用日媒资料被要禁化武组织称叙利亚提交销毁化武初步计俄罗斯航空专家开始在美国上空进行观察麦当劳与四十年“老伙伴”亨氏番茄酱分美国共和党参议员计划推迟叶伦的美联储美国广播公司高管就“杀光中国人”视频日借太平洋岛国会议插手南海朴槿惠为职棒比赛开球 露甜美微笑【组纽约华裔家庭五人被杀案疑犯被捕 为被女教师被调离因婆婆抗拆 评论吁查幕后中国海警编队10月28日在中国钓鱼岛安倍称不容中国“武力崛起” 外媒称中美医保网站高管被爆系奥巴马夫人同学 马尚-布鲁克斯加盟CBA江苏男篮这么看来,德国比日本更可怕如何训练自己的逻辑思考力贵州玉屏:运行“小部制”提升乡镇治理今日推荐 | 胖也许很快成为互联网禁【早报】这些涉黄网站、网盘等企业被罚这些推理书的诡计,你永远看不穿布鲁尔近日举办青少年篮球训练营世界上最健康的生活方式!(最好背下来ESPN:谁是新赛季最好的5支球队?今年不管你做哪一行,都看看这篇文章热刺主帅:索尔达多仍在计划之中中东完了,石墨烯电池充电10分钟跑1传热刺有意前蓝军中场梅莱雷斯重磅!周小川释放了这些信号!(干货版【百思不得姐。 七彩JIE】 张红:风口上的互联网造车 馅饼or陷自选型保险——市场日趋人性化,消费更8月6日汽车圈重要事件提醒吴松:传祺会在新能源道路上持续发力你知道什么情况需要用胰岛素吗?
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘