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

还是字体块--VB 程序字体字号修改之三

作者: 梁利峰 来源:点睛工作室 时间:2003-08-02 点击:9254


还是字体块
        —— VB 程序字体字号修改之三


声明

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

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

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

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

向前进

接着上一次的展望,这两天又再窥窃了一些 VB 窗体块的秘密。不像字体块,窗体块的结构太庞大,非一人一时所能研究得透的,只能把目前的一些结果说一下,也希望能有更多的人参与到这个行列里来,共同研究这个项目。

正像我上一次所说,首先可以确定窗体块确实存在,而所以把它称为窗体块,就是说 VB 程序在加载窗体的时候其实只用到了一个指向窗体块的指针,而窗体究竟怎么显示和显示什么取决于窗体块的结构。换句话说,VB 显示窗体和控件是基于分析窗体块的结构,而并不像我们以前所想象的是分别编译的。

VB 程序的一般包含窗体和模块,而编译的时候也是这样,所以也可以说,编译出来的可执行文件也有窗体和模块,只不过可能界限比较模糊。不过,我们还是可以找出一个 VB 可执行文件的项目中究竟有哪些窗体和模块。不过,我对于此目前并没有太好的办法,几乎只是靠经验判断,只有一条很不准确的判断方法:VB 的“工程名”、“窗体名”和“模块名”是放在一起的,其间用不定个数的“00”隔开。

另外一方面,作为窗体块,在它的“窗体名”之前的 11 个字节也可以作为一种判断的方法(其实不止 11 个字节)。这 11 个字节,前四个字节组成一个长整数,表示从此到整个窗体块的结尾的大小;然后的四个字节组成的长整数表示窗体本身的大小;最后的三个字节的意义未知。不知道我是否讲明白了,具体说,窗体本身的大小 + 窗体上控件的大小 = 整个窗体块的大小 。

刚才说“其实不止 11 个字节”,因为在这 11 个字节之前有大量的“00”也可以作为判断的标志,而且在这些“00”之前还有很多字节也是属于窗体块的,而且其中有很多项是相同的,作为标志更为合适。

再回首

再进一步研究之前,我想停下来看看我们现在知道的东西是否已经可以派上用场了。

首先,一个窗体块很大,其中包括了此窗体上的控件;另外,窗体块是作为一个整体而存在的,其中的任何一部分都不是单独存在的。

回忆一下我上一篇文章里所说的限制,“如果是主窗体中的一个控件有字体块,而主窗体没有字体块的话,则只能修改那一个控件的字体。”,如果窗体块是作为一个整体存在的,我们能不能把控件的字体块移动到主窗体上呢?

能!

移花接木

以 Vopt99 4.15 为例。在这里我用的是“Weiping”汉化的版本,上次说过,修改字体块后,主窗体因为没有字体块显示不正常,主窗体下方的“图例”框的字体显示正常,所以就拿它开刀。

首先,用我刚才说的那种“很不确定的方法”得知 Vopt99 包含一个工程“Vopt99”,三个模块“NTVoptB”、“NTVopt2B”和“NTVoptM”,另外就是五个窗体“NTVoptHex”、“NTVoptF”、“Xclean”、“Settings”和“Splash”。进一步可以判断主窗体是“NTVoptF”。

现在找到“图例”框的字体块,因为“图例”框是一个“PictureBox”(通过 Spy++ 取得其“类名”,就可以知道,此法还可以判断程序是否 VB 编的),所以我们先用 UEdit 打开 Vopt99.exe ,然后查找“39 01 00 00 00 90 01”,第一个查到的字体块位于“PicHistoF”控件块中,并不是我们要找的;第二个字体块位于“picMap”中,也不是我们要找的;然后找到第三个字体块,真奇怪,它居然就位于“图例”中,如果这是我编的程序就不足为奇了,但不是,所以这是汉化的结果,不过却是错的,因为此处的名称并不显示,而是作为“Name”属性保存的,如果程序中用到了“Name”属性,这样的翻译将会导致错误,所以我们先将其改回“legend”。(关于哪一个字体块是需要找的,我做了测试,并非一次就判断对了的)

现在,我们找到字体块的开头,选中字体块,因为是“Arial”,所以共有 17 个字节,按“Ctrl+X”剪切。然后,可以见到在控件名前第 7 个字节开始的一个长整数表示此控件块的大小,原值“40 00 00 00”,减小 11h,所以修改成“2F 00 00 00”。

按“Ctrl+Home”回到文件顶部,再次查找字符串“NTVoptF”,一次找到,因为总体大小保持不变,所以第一个长整数“C9 76 00 00”不需要变化,而第二个长整数“5A 03 00 00”就需要修改了,增加 11h ,所以修改成“6B 03 00 00”。

在窗体名“NTVoptF”的下一行有一个“Vopt99”,这是窗体的“Caption”,然后下面有一屏多的乱七八糟的东西,这是窗体的图标,把它翻过去,在一串“00”之后有一个“Form1”,这是窗体的“LinkTopic”,和 DDE 有关,一般程序现在都不使用 DDE ,所以一般也没有什么用处,程序员很少关心,VB 编辑器会自动生成类似“FormN”这样的“LinkTopic”,所以也可以作为一个判断标志使用。

再下去两行,有“46 02 49 01 FF”,把光标停在“46”的“4”上,检查 UEdit 在“插入模式”,按“Ctrl+V”粘贴。(为什么在“46”之前呢?我不知道,我是经过好几次测试了的。反正有什么不知道的,试一试!)

最后,修改字体块。因为是 PictureBox ,所以原字体块以“39”开头,现在是窗体了,所以把“39”改成“40”,再把语系(Charset)改成“86”,然后把字号改成 9 ,也就是“90 5F 01 00”,然后把字体名都改成空格。存盘。

运行,可以看到,主窗体的字体已经被修改成“宋体,9”了。

(“Settings”窗体是 Vopt99 中另一个重要的窗体,关于对话框和所有的设置对话框都是它,但是因为“Settings”虽然大,但是在其中却没有一个控件有字体块,所以不能作这样的修改,而增加字体块至少需要 12 个字节,把“LinkTopic”改成空也只能增加 5 个字节,还有 7 个字节没有着落,所以目前不能修改。以后可以通过把翻译空余的字节累加到窗体上来实现增加字体块。)

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

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

·上一篇: 再论 VB 程序字体字号的修改 ·下一篇: 突出重围-VB 程序字体字号修改之四

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

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

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

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