定制Delphi的新建文件模板与新窗体的默认字体

来源:互联网 发布:sql 当前时间减一天 编辑:程序博客网 时间:2024/06/06 02:00

定制Delphi的新建文件模板与新窗体的默认字体
                                by eGust


有时候,我会建一个Console项目用来测试一段简单的代码,在Delphi 7中会自动生成如下的代码:
program Project*;

{$APPTYPE CONSOLE}

uses
  SysUtils;

begin
  { TODO -oUser -cConsole Main : Insert code here }
end.

为避免在ide中运行完就直接退出而看不到输出结果,每次都要在末尾加一句Readln,有时候还常常重复写一些其它的代码。用多了的话也总觉得麻烦,无形中浪费了不少时间。所以一直以来有个想法,能不能改动Delphi的新建文件模板,把自己的常用代码塞进去——毕竟删代码的速度比敲代码快多了。今天花了些功夫,终于搞定了它。

在动手之前,先来准备一个能修改PE文件中的资源文件的工具,我用的是MS VisualStudio。首先打开D7(这里用Delphi7举例)安装目录下的Bin目录,里面的delphide70.bpl就是我们要开刀的文件了。为防不测,还是先备份它一下为妙。
首先把delphide70.bpl的扩展名.bpl改为.dll,然后丢到VS里,接下来找到RCDATA并双击其中的PASCRTRS。全选里面的内容复制出来,就会看到一些比较熟悉的Delphi代码:
unit %s;

interface

implementation

end.
|
|unit %s;

interface

uses
  SysUtils, Classes;

type
  %s = class(%s)
  private
    { Private declarations }
  protected
    { Protected declarations }
  public
    { Public declarations }
  published
    { Published declarations }
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('%s', [%1:s]);
end;

end.
...
熟悉Delphi的人一眼就能看出来,第一段显然是空Unit文件,第二段是New Component用的等等。里面的%s明显是给Format用的,都是些新建时才能决定的名称;而“|”大概是用来分隔不同单元文件之类的东西,不用管它们。
现在举例修改Console模板,首先找到Console模板的位置,把相关部分改成:
|program %s;

{$APPTYPE CONSOLE}

uses
  SysUtils;

begin
  try
    { TODO -oUser -cConsole Main : Insert code here }
  except
    on E:Exception do
      Writeln(E.Classname, ': ', E.Message);
  end;
  Readln;
end.

需要注意的是,如果模板里需要出现“%”字符的话,一定要写成“%%”,因为模板中的字符串是Format的第一个参数,不转义的话就挂了。接着,用新模板替换掉原来的PASCRTRS,保存之后,再把修改好的文件名改回delphide70.bpl,最后覆盖掉d7的bin目录中的文件(如果开着d7的话要先关掉)。这时,我们的替换工作就完成了。打开d7新建一个Console项目,就会发现现在自动生成的代码已经变成上面的样子了。

在PASCRTRS里,除了前面说的空Unit、Component外,还有DLL Project之类的许多模板。比如做DLL项目的时候,常常需要弄一个类似 DllMain(dwReason) 的东西出来,直接定制bpl资源中的模板文件就方便多了。
btw,对于BDS 2009来说,这个 PASCRTRS 模板在 delphicoreide120.bpl 中。


最后再顺便介绍一下改变d7新建窗体的默认字体的方法。
DelphiDistiller提供了一个功能,可以把d7的新建窗体的默认字体替换成Tahoma。它的原理是替换 {D7安装目录}/Bin/vcl70.bpl 中用于表示该字体名的ShortString。这种字符串的格式是:在字符串正文开始之前的1字节用来说明字符串长度,然后在它后面紧跟着整个字符串,这个字符串不需要包括C语言形式的字符串结尾(C中的'/0'或Delphi中的#0)。从vcl70.bpl中相应位置后面跟着0的数量来看,这里塞个20多字节的字体名应该是没啥问题的。
如果既不习惯Borland默认的MS Sans Serif,也不喜欢DelphiDistiller唯一能改成的Tahoma字体的话,那就自己动手改吧:
  1 首先找个可以16进制编辑的编辑器(如WinHex、UltraEdit等),打开vcl70.bpl搜当前的默认字体名(如D7默认的“MS Sans Serif”);
  2 找到之后,在相应位置填入你喜欢的字体名,如果不够覆盖掉原来的,后面清不清0其实无所谓(但为了美观还是清吧);
  2.5 如果你说要改的字体名超过30字节的话,我……无语了 = =;
  3 最后别忘了,要把字符串前面那个用来说明字符串长度的字节,改成新字体名的长度(别说不会数数……)。

保存之后,打开D7再来看看效果吧。

原创粉丝点击