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

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;

Android Widget开发模板 Zipalign使用方法-SDK中的APK文件优化工具 Android蓝牙控制之2.X或以上 Android数组排序常见方法 使用OpenGL开发一个指南针 Android自绘GridView控件 Android平板开发注意事项 Android控件TextProgressBar进度条上显文字 Android内存管理-SoftReference的使用 反射在Android开发中的利弊 intent调用代码总结二 Android缩略图类源代码 Android多人项目开发指导 AsyncTask对比Thread加Handler Android Drawable叠加处理方法 android.os.Debug调试工具使用方法 Android多点触控开发原理 inent调用代码总结,不断完善中 onRetainNonConfigurationInstance和getLastNonConfigurationInstance Android中String资源文件的format方法 Android工程内嵌资源文件的两种方法 Android AIDL全攻略三 - AIDL框架 Android AIDL全攻略二 - Service绑定 自定义Android主题风格theme.xml方法 Android开发之模拟按下Home键的效果 Android AIDL全攻略一 Android Picture和PictureDrawable的用处 Android自定义View以及layout属性全攻略 Android通过Intent发送电子邮件含附件 Android调试技巧之Eclipse行号和Logcat Android Txt文本读写类源代码 请问各位消息灵通人士 有誰做過串口打印機的編程 如何转换设备坐标(左上角为原点)为数学常用的习惯坐标,既左下角为原点 高分邀请大家讨论做lotus/notes的共享精神,跟贴有分。 关于vc调试,F11单步执行怎样才能跳过 cout<<等函数内部 这段代码什么地方有错? 沙锅之问一:各位老大,请谈谈在jsp中打印当前页面的问题,很想知道你们是怎么做的!!! 有人对php中处理xml熟悉吗? 两个异地的windows2000 server服务器,如何配置在一个组织下! 用ADO做SQL的操作出现的奇怪问题 帮忙解释一下scjp中的这道线程题…… 我的这段程序为什么不能出现图标呢?(有关树控件)急等! 请问哪里有maple下载 给100分 怎样才能更好的通过网络学习,不断的提高自己,大家各抒己见! google被封,上有政策,下有对策,想继续使用google的进来!!! 有kjava相关的资料或信息者请入 使用session问题 各位大侠,怎样在VB6中通过代码,控制SQLServer6中数据表的权限,如只读,可写,能删等。 谁知道哪有SCJP的英文原版教材下载呀? 为什么对话框的类都看不到析构函数! 请教一个SQL的问题 从局域网内拷贝文件,总是断线 问大家一个特别傻的问题,但是请务必帮我解答,谢谢了 问大家一个特别傻的问题,但是请务必帮我解答,谢谢了 treeView控件的问题 asp中的几个问题,急! 在类中用static const 定义常量的问题 谁安装oracle9i了? 哪里有文档编辑软件的源程序(带查找、替换),给url就给分? =最近做了一个免费小工具,想请大家帮忙测试并发表一些关于我的程序功能和界面布局的意见= 很急 [建议]关于提问 100分请教如何使用JS来实现定时执行alert()命令 请问怎样给DataGrid添加一个空行? 请问在用openssl生成csr时出现如下的问题,如何解决?急用 100感谢 =最近做了一个免费小工具,想请大家帮忙测试并发表一些关于我的程序功能和界面布局的意见= oracle 9i的问题,急救 24位的位图是不是没有颜色表? 一个简单的关于层的问题,谁能帮我解释一下呢? 请问在用openssl生成csr时出现如下的问题,如何解决?急用 100感谢 超菜问题? 现在网上有没有破解的MDaemon下载? 唉,和老妈吵架~散分~~ LyfUpload组件上传时能否添加下拉框,并把其值一起提交到数据库中?急!急!急! 请高手一览:为什么这段程序不能写进数据库?不好意思,分只有这么多了!呵呵 建立一个收费的网站的思路如何?请大家指教! 怎样改造Anythere 5.0的数据库? 有没有去过珠海的朋友? 我出100分重新讨论《100分求助:如何解决内存泄漏,代码如下》 有没有现成的软件,判断一个email的使用方的具体位置,到“市”一级? 用ADO能不能用SQL语句将Access2000库中的表复制到SQL2000server库中? 我想用发光二极管做个装饰 估计需要200个二极管 应该怎么连接电源 还有二极管应该用什么联法?只有10分 希望有人帮忙下谢谢 移动电源不充满电能直接用吗? 由于细胞核作用,细胞能不断的与外界进行( )交换. 油锅着火燃烧:1放沙子 2盖锅盖并关闭煤气阀门 哪个更好 移动电源充多久电能满 细胞质和细胞核之间进行着频繁的物质交换细胞质与细胞核之间进行着频繁的物质交换和信息交流,下列物质必须通过核孔才能进出细胞核的是①脱氧核苷酸 ②核糖核苷酸 ③RNA ④RNA合成酶 发生炉煤气主管道上依次有哪些阀门? 哪个品牌的移动电源好一点?移动电源充满电能用多久? 入体摄入的营养物质用于()A构成细胞B交换废物C提供能量D构成细胞核提供能量 在剧烈运动,肌肉缺氧,葡萄糖消耗增加,但ATP的生成量没有明显增多原因为什么是大量能量储存在乳酸中 而不是大量能量以热能形式丧失? 移动电源充满一次电能用多久 热量是如何进行传递的?热量是通过碰撞的形式产生的,是通过什么形式吸收的? 在剧烈运动时,肌细胞产生ATP的速率增加下列有关ATP的叙述,正确的是①人长时间剧烈运动时,骨骼肌细胞中每摩尔葡萄糖生成ATP的量与安静时相等②若细胞内Na+浓度偏高,为维持Na+浓度的稳定, 她让王叔叔帮她修自行车She asks Uncle Wang to( )it for her. 一分钟过去了,地球上大约又增加了300个婴儿.全球平均每秒大约有多少个婴儿出生要等量关系式,解方程 麦克斯韦方程组式中的积分能下一个定义么,我只学过高中简单的定积分微分的那个倒三角什么意思,想仔细研究一下越详细越好,最好说一下这几种符号的意义 他因为会骑自行车,所以会修自行车 修改病句 解方程 一分钟过去了,地球上大约又增加了三百个婴儿.全球平均每秒大约有多少个婴儿出生? 麦克斯韦方程组及其应用? 谁帮我解释一下麦克斯韦方程组的意义及实际应用 一分钟过去了,地球上大约又增加了300个婴儿.全球平均每秒大约有多少个婴儿出生?要验算,明确一点. 怎样证明麦克斯韦方程组?我现在大三,学的电磁场与电磁波课中讲到麦克斯韦方程组.想求高人给出麦克斯韦方程组积分形式和微分形式的详细证明过程.谢谢! 如何借助作用量原理推导麦克斯韦方程组? 一分钟过去了,地球上大约又增加了300个婴儿.全球平均每秒大约有多少个婴儿出生?怎样写关系式 植物细胞核为什么不在中间,而在一侧 研究日常生活中哪些现象及其物品与岩石有关?并记录下来! 成都理工的地球物理学真的好就业吗? 植物有没有细胞核? 岩石的用处有哪些?列:腌菜是,把它压在上面. 英语翻译转录我知道啊 但是为什么翻译也是呢 不是在核糖体上进行的吗?那应该在细胞质啊 四驱车马达和二极管要怎么接才可以亮?我要用四驱车马达快速转动.产生电.使二极管亮.(那个二极管很小.马达也是重普通的四驱车里拆下来的...是不是把二极管的两条线接在马达的那两个 叶绿体是植物进行( )的场所?细胞核内含( 细胞壁其主要成分是( 欧迪克太阳能和皇明老款差别 国内哪所大学有做行星地质学方面的研究?如题,想知道国内有哪所大学在做行星地质学方面的研究?或者有这方面的研究~ 植物中的细胞核主要化学成分是什么 欧迪克太阳能好吗?买皇明的好还是欧迪克的好? 环氧树脂灌胶机B胶固化剂出来时正常,再点A胶环氧树脂,两种胶水混合出来后,胶体就晃来晃去不稳定. 在地球深处有没有土壤,有没有坚固的岩石快呀,急用 将15.8g高锰酸钾放入试管中加热制取氧气加热到不再产生气体为止(1)反应后剩余固体的物质的质量____原高锰酸钾的质量(填大于、小于、等于) 推断的依据是_________(2)剩余固体物质中含 环氧树脂胶固化后为什么软软软软的不硬?而且颜色慢慢变了 地球陆地表面最初到底是岩石还是泥土?月球呢? 读悼念玛丽居里的读后感,拜托要自己现写的 人工煤气和天然气的区别 “我把养花当作生活中的一种情趣.”是病句么,是的话怎么改呢 写一篇关于悼念玛丽居里的读后感,要自己现写的, 求高一数学的的笔记 麦克斯韦方程组是什么? 实验室常用分解高锰酸钾制取氧气,同时还能得到一种常见的催化剂,问在制得4.8G的氧 高一数学必修1笔记 麦克斯韦方程组讲了什么简明的 两个不锈钢碗由于大气压力卡在一起了应该怎么拿出来? 300字 麦克斯韦方程组的证明积分证明 NPT3/4和3/4-16UNF-2B有什么不同 高一数学必修2的教学札记是什么意思 移动电源充电时间计算,移动电源多久可充满 中国石油大学的地质学怎么样,我是说地质学,不是地质工程华东的 最下面这个公式怎么理解,记完的笔记又忘了... 地球什么时候才绕一圈讲究科学道理 岩石的用处
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘