怎样改变delphi的默认字体 (delphi 3 和 delphi 4)?(30分)

  • 主题发起人 主题发起人 Mary
  • 开始时间 开始时间
M

Mary

Unregistered / Unconfirmed
GUEST, unregistred user!
怎样改变delphi的默认字体 (delphi 3和delphi4)
当新增一个Form时,Form的字体默认为MS Sans Serif,大小8号,
我想改成默认为宋体,小五号,以后每新增一个Form时,就不必再改动其字体了。
不知怎样实现。
 
把这个文件重新编译生成dialogs.dcu, 然后放在LIB目录下就行了
 
刚才在Delphi的目录里刨了半天, 没有找到什么直接的文件可以轻松地解决 这个问题.
但是我想了一个稍微复杂一些的变通方法: 那就是您自己继承
TForm成为TSimSunFontForm, 在这个Form的初始化方法里面对字
体属性赋值, 这一样您新建成的Form虽然不具有您想要的字体
属性, 但是您可以简单地将它的父类从缺省的TForm改成
TSimSunFormForm, 一切就OK了. (您可以通过Copy/Paste进一步
简化这个操作, 或者像您对dialogs.dcu所做的手术那样, 直接修
改源码, 但这是下策)
 
pegasus:
看来你对DELPHI的编译环境比较熟,我的DELPHI出了一些怪毛病,
找出这些毛病可能可以解决这个问题:
毛病:不论怎样建立新窗体,都出现的是ABOUT窗体,包含ABOUT的图标.文字.按钮
 
说穿了一点不难,这个问题是这样的:
delphi支持窗体模版,比如用file|new,会打开一个窗口,来选择模版。

1. 如pega所述,生成TSimSunFontForm;
建一个空窗体,把字体改了,换一个名字,比如TSimSunFontForm;
存在/temp/SimSunFontForm.pas, .dfm中;
2. 在/delphi x/bin下找delphi32.dro文件,这就是模版控制文件,INI格式。
用文本编辑器打开。
3. 在[Repository Pages]组中中加入页名;如
mypage=
3. 加入

[C:/temp/SimSunFontForm]
Page=mypage 和上面对应,注意是区分大小写的。
Type=FormTemplate 不要改,表示这是一个窗体
Name=SinSunFontForm 名字
Icon=someico.ico 自己画吧
Description= xxxx 自己写
Author=曹晓钢 :) hehe!
DefaultMainForm=1 * 这是最重要的,李先生检查一下,是不是about
窗口设置中的这个值设错了
DefaultNewForm=1 * 如果设成了1,File|New Form就用它建。

这个技术是在大规模开发程序中使用的,我在讨论
<td><a href="DispQ.asp?LID=10655">一个EXE文件中FORM太多怎么办,TDATABASE可以作为参数传递到DLL中吗?</a></td>

<td><a href="DispQ.asp?LID=23966">如何连接多个工程文件</a></td>
时提到过的,Form继承的方法其实就包括了这些。
当时以为大家都知道...


OK!

希望有帮助。
 
//天哪!
HTML写错了。
不好意思。
 
Great, 曹晓钢,Hehe
 
最很的方法还是该borland的源程序,

在SOURCE/VCL下找graphics.pas
再查找'sans'找到一个记录
DefFontData,这个record是 TFont default value,
也是所有component所用的font,包括Form

改好文件后,重新编译delphi的Lib,OK!
 
jiangtao的方法我已经试过了,可惜并不灵,以下的方法也是改Graphics.Pas
找到 InitDefFontData 做这样的改动:

procedure InitDefFontData;
var
Charset: TFontCharset;
begin
DefFontData.Height := -MulDiv(8, ScreenLogPixels, 72);
if not SysLocale.FarEast then Exit;
Charset := GetDefFontCharset;
case Charset of
SHIFTJIS_CHARSET:
begin
DefFontData.Name := '俵俽 俹僑僔僢僋';
DefFontData.Height := -MulDiv(9, ScreenLogPixels, 72);
DefFontData.CharSet := CharSet;
end;
//飞人加写
GB2312_CHARSET:
begin
DefFontData.Name := '宋体';
DefFontData.Height := -MulDiv(9, ScreenLogPixels, 72);
DefFontData.CharSet := CharSet;
end;
//飞人加写结束。
end;
end;
显然,这段源代码是为SHIFTJIS_CHARSET语言环境编写的,没有专为中国汉字编写,
不知是不是Delphi的BUG?
经过这样的改动,以后程序中调用的ShowMessage、InputQuery、InputBox等等
函数显示的汉字和操作系统界面一致(即汉字),而动态创建的Form(TForm.Create方法)也有同样的性质,如果要使建立新Form时也能出现这样的效果,需要重新编译VCL40.DCP(但需换名编译,因Delphi本身正在使用这个文件)。
 
谢谢大家,受益非浅!
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部