·汉化新世纪 ·汉化新世纪论坛 ·百家争鸣 ·论坛集萃 ·汉化问答 ·软件介绍
文章首页 >> 汉化教学 >> VB汉化 >> VB 可执行文件字体字号的修改    Creative Commons License,创作共用协议(中文版)  署名 非商业性使用 禁止演绎

VB 可执行文件字体字号的修改

作者: 梁利锋 来源:点睛工作室 时间:2003-08-05 点击:10338


VB 可执行文件字体字号的修改


声明

个人可以自由转载本文,不过应保持原文的完整性,并通知我;商业转载先请和我联系。

本文没有任何明确或不明确地提示说本文完全正确,阅读和使用本文的内容是您自己的选择,本人不负任何责任。

如果您发现本文有错漏的地方,请您给我指出;如果有什么不理解的,请您给我提出。

意见、建议和提出的问题最好写在我的主页 http://llf.126.com 的留言版上。

字体字号的问题

以前“伟乾”问为什么修改 VB 的可执行文件的字体后,程序启动会出错,我于是也做了测试,也修改了一个可执行文件的字体,也同样满怀希望的运行,也同样出错了,我不知道为什么,于是就放下了。

不过我一直纳闷,它的出错提示很奇怪,是“无效文件格式”,最近仔细想一想,所谓“无效文件格式”想必是因为 VB 把整个窗体的数据当作一个文件传送给了 VB 的运行库“Msvbvm50.dll”(或 Msvbvm60.dll),而一般我们汉化文件的时候修改字体名总会比原字体名短,比如在美国程序中比较常用的“MS Sans Serif”,占用 13 个字节,中文软件常用的是“宋体”,占用四个字节,从这一方面来说,本不应该出现问题,但是最终出现问题了,除非字体也是作为一个整体处理的,当然,字体确实是一个整体:

   BeginProperty Font 
      Name            =   "宋体"
      Size            =   9
      Charset         =   134
      Weight          =   400
      Underline       =   0   'False
      Italic          =   0   'False
      Strikethrough   =   0   'False
   EndProperty

好的,首先应该知道 Size = 9 并不一定表明可执行文件中的也是“09”,如果大家用过 Win32pad 的话,在 Windows 的目录下会有一个 Win32pad.ini ,打开它可以知道,当我们选择“宋体,9”的时候,Size 其实是 180 ,但是 VB 中是否使用的也是 180 呢?也不一定,不过我们先对以上的数字进行一下到十六进制的转换:字号 9 可能是“09”,也可能是“B4”;Charset 是语系,一般的一种字体只有一种语系,比如“宋体”的语系就是“GB_2312”,也就是 134 ,十六进制数是“86”;Weight 应该是字宽,不太清楚,不过也进行转换,400 就是“90 01”,然后我们就可以进行可执行文件的查找和编辑了。(可以下载我用来测试的例子文件

因为是一个整体,所以其它的信息既可能在字体名的前面,也可能在字体名后面,在例子文件中同一个文件都有两个字体块,一个是窗体的,一个是标签(Label)的,所以可以比较一下,具体的比较很乏味,有兴趣可以自行进行,我在这里只简单的说一下,才开始我以为数据应该在字体名后面,我错了,后来我以为数据只在字体名前面,我又错了,最终的结论是:在字体名之前的 10 个字节(或 11 个字节,因为向前第 11 个字节都相同,但是看不出有什么用)和字体名之后的 1 个字节和字体名共同组成了字体块

所以要把字体字号改成“宋体,9”的话,需要把现成的有“宋体,9”的文件中的字体块复制到要修改的文件中。在例子文件中,英文字体块的十六进制如下“00 00 00 90 01 44 42 01 00 0D …… FF”,其中“……”表示字体名,从这里我们见到了“90 01”(Weight),其它的倒也不知道是什么意思;中文字体块的十六进制如下“86 00 00 90 01 90 5F 01 00 04 …… FF”,从这里,我们不仅见到了“90 01”,还见到了“86”(Charset),这也是我判断字体块大小的重要依据。最后要做的就是替换了,这一步比较简单,不过有一点需要注意,最后的结尾的字符不一定是“FF”,在我的例子文件中也有“46”的,其它的程序中应该也是这两种,但如果不是,也不奇怪,只要把原字体名之后的一个字节复制到修改后的字体名之后就可以了。至于在字体块中哪一个字节是字号,我不知道,不过只要全部复制,显示出来的就是“宋体,9”了。当然,如果想要和原字体一样的显示加粗,斜体,下划线的话,就需要对其中的字节进行比较判断,应该不会太难,各位可以自己试一下。(我推测“FF”可能是整个窗体的结束标志,不过没有证据)

具体的图例我就不给出了,各位可以参见并比较例子文件,应该会收到更好的效果。

点睛工作室·梁利锋 结稿于 2000.5.15

汉化新世纪 责任编辑: 乾 .:|:. 标签(Tag): VB 字体

·上一篇: 汉化收集应有道 ·下一篇: 汉化ASCII字符串的高级技巧I

· 版权申明: 本文引自《点睛工作室》,如有版权疑问请及时联系本站,以便本站处理。

· 转载申明: 本文引自《点睛工作室》[ 作者: 梁利锋],如需转载请直接联系原始作者,并请注明原始出处。

相关文章                                                                                发表评论 打印此文 关闭窗口

| 设为首页 | 加入收藏 | 联系我们 | 友情链接
Creative Commons License,创作共用协议(中文版)  署名 非商业性使用 禁止演绎
本站内容,除转载或版权特别申明的内容外,皆遵守 创造共用协议中文版之“署名-非商业性使用-禁止演绎 2.5 中国大陆”条款
This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 2.5 China License.
本网站内容源自汉化新世纪论坛的摘录和汉化新世纪成员的原创文章。
凡汉化新世纪论坛的文字皆默认为汉化新世纪与原作者共同拥有并授权发布。
如对本站发布文章有所异议请来信告知,我们将及时删除。
凡商业摘录本站文字请先与我们联系,本站将保留非授权商业发布的追究权利。
凡非商业摘录本站文字请明显注明出处和原作者,并不得改动,凡改动必先征求原作者同意。
苏ICP备05002283号