以下的方法是改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本身正在使用这个文件)。