Delphi 字号修改之二

原创 2001年02月08日 17:59:00
Delphi 字号修改之二


声明

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

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

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

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

Hint

在上次的 Delphi 消息框字体问题之后,又有汉化人提出 Hint 字体修正的问题,在说这一个问题之前,我们要再熟悉一下微软推荐的字体设置方法:

大家也看到了,最后一个参数是 72 ,也就是十六进制的 0x48 ,而且它是一个常数,所以这样的语句编译到可执行文件中的时候就会出现一个明显的 push 00000048 的语句,而且,因为 72 是最后一个参数,所以这个 push 语句是这一行程序的第一个 push 语句,这样,上次我们介绍的修改消息框的方法就可以用 push 00000048 作为辅助判断方法,据大宇说,用这种方法判断,迄今为止是百发百中的。 :)

而这一次的 Hint 的问题,因为在反编译出来的文件中找不到“push 00000008/n/n* Reference To: kernel32.MulDiv,”或上面几行没有“push 00000048”,所以无法找到需要修改的地方,我通过查找代码发现,对于 Hint 的字体设置,其中并不是直接压入 8 ,也就是说没有明显的 push 00000008 ,但是仍然是可以修改的。

以前 ChinEase 曾问过 iProtect SoHo 的字体问题,当时我并不熟悉,以为主界面是使用了枚举的方式设置的字体,觉得不能解决,不过现在才发现其实其主界面字体是可以自己设置的,所以所剩的字体问题仍然是 Hint 的问题,在这里就以 iProtect SoHo 为例说一下。

用 W32dasm 反编译 iprotect.exe ,生成 iprotect.alf ,打开它,查找 push 00000048 ,发现四个,其中后两个一个因为在 call MulDiv 之上的语句是 push 00000009 ,所以已经是 9 磅的字体,另一个后面根本没有 call MulDiv ,所以更不是我们所要找的语句了,剩下的两个如下:

可以看到,在 call MulDiv 之上并不是压入的常数,而是寄存器值,而这两段代码其实是函数,所以它是通过别人调用来设置的,这需要跟踪才能知道究竟是谁在调用,我最近发现其实 W32dasm 也可以进行动态跟踪,因为不会中止其它进程,所以我现在比较喜欢用 W32dasm 来跟踪 —— 可以同时听 mp3 。 :) 不过 W32dasm 的跟踪界面有些零乱,我就不介绍了。在这里,跟踪到调用者:

	

就是最后一个 call 0041DB54 调用了上面的设置字体的代码,我们发现很明显的上面有一个 mov edx, 00000008 ,我们尝试把它修改成 mov edx, 0000000F ,运行程序,发现 Hint 的字体真的变得很大了,也就是说,改对地方了。

另外,第一句的 mov edx, 0041AE38 其实压入的是字体名,所以最后的修改是:把 0x1a239 处的“MS Sans Serif”改成“宋体”,把 0x1a208 处的 08 改成 09 。(0x1a238 处是字体名的长度计数器,最好也修改成 04)

简单方法

上面的介绍只是为了让大家知道为什么要这样修改,其实是有一种简单的方法找到要修改的地方的。我说过,Delphi 程序员一般不会自己创建字体,所以这里的仍然是 VCL 的问题,而 VCL 编译出来的代码不会因为不同的程序而不同,所以仍然有规律可循。

不知道大家注意到没有,上面修改的地方相差不大,一个 0x1a239 ,一个 0x1a208 ,只相差 0x31 ,对于 UEdit 来说,就是三行多一个字符,其实这就是它的规律,我们可以先找到究竟是哪一个字体名的问题,再向上三行,找到一个“BA 08”,把它改成“BA 09”就可以了,我修改的几个程序用这种方法的成功率目前也是百分之百的。:)

至于怎么找到是哪一个字体名的问题,我就不说了 —— 顶多一个一个的改成“System”进行测试,一定可以找到的。 :)

版权声明:本文为博主原创文章,未经博主允许不得转载。

096_《Delphi5高级编程丛书之二:GUI编程》

本书全面深入地介绍了如何运用 Delphi 5进行 GUI编程,书中的内容非常丰富,涉及以下几个方面:设计应用程序的图形界面;使用Windows公共对话框和Win32公共控件;通过剪贴板、DDE和OL...
  • shuaihj
  • shuaihj
  • 2010年12月18日 15:28
  • 2087

iOS学习笔记之WIFI技术

iOS下Wi-Fi开发需要添加依赖库SystemConfiguration.framework,在需要使用Wi-Fi信息的控制器下引入头文件#import   1,Wi-Fi热点获取 ...
  • ANDY_GUO_wei
  • ANDY_GUO_wei
  • 2017年06月05日 15:24
  • 237

C 程序字号的修改

C 程序字号的修改 声明个人可以自由转载本文,不过应保持原文的完整性,并通知我;商业转载先请和我联系。 本文没有任何明确或不明确地提示说本文完全正确,阅读和使用本文的内容是您自己的选择,本人不负任何责...
  • jiangtao
  • jiangtao
  • 2001年02月08日 18:02
  • 3910

关于VC字号大小的设置相关代码

 关于VC字号大小的设置相关代码  HBRUSH CVideo::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) {    HBRUSH hbr = ...
  • cobay
  • cobay
  • 2008年12月18日 08:53
  • 1179

LaTeX 中英文字体字号设置

转载自 LaTeX基础四:字体字号设置 - shawncheer - 博客园 http://www.cnblogs.com/shawncheer/p/5844925.html %导言区 \do...
  • ujsDui
  • ujsDui
  • 2018年01月16日 15:21
  • 114

Ueditor编辑器修改字体和字号?

Ueditor编辑器 首先,在ueditor中找到fontsize,然后参照下图: 然后在ueditor.all.js中修改fontsize: editorui.fontsize =...
  • gexiuhua
  • gexiuhua
  • 2017年11月20日 16:45
  • 575

快速修改 Delphi 资源

  快速修改 Delphi 资源作者: 刘亮亮 最近需要在没有源代码的情况下对delphi 的软件界面最较大调整,翻看了一些资料,没有找到合适方法,经过了自己一天的试验摸索终于找到了一个快捷的方法.下...
  • Blue_Dream_
  • Blue_Dream_
  • 2008年01月08日 08:48
  • 4096

iOS 改变Label字号大小

label.font = [UIFont systemFontOfSize:你想设置的大小]
  • saw471
  • saw471
  • 2016年05月10日 14:42
  • 606

关于修改Android系统默认字体大小

关于修改系统默认字体大小的方法:到设置应用所在目录leadcore\third-packages\apps\Settings\res\values\目录下的arrays.xml文件中的entryval...
  • wzh048503
  • wzh048503
  • 2018年01月10日 17:20
  • 48

如何修改Delphi自带控件

举例说明:比如要在Dialogs单元添加一个新的函数Proc_SuperBIrdXP1、备份Delphi的Lib目录中的Dialogs.dcu文件、source目录中的Dialogs.pas文件。2、...
  • superbirdxp
  • superbirdxp
  • 2008年07月10日 19:20
  • 1260
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Delphi 字号修改之二
举报原因:
原因补充:

(最多只允许输入30个字)