No.1之Gexperts
作者:陈省
GExperts应用指南
GExperts是一组通过扩展集成开发环境(IDE)来提高Delphi和C++ Builer程序员工作效率的工具,详细的算的话,至少有二,三十项对Delphi的IDE功能的补充。GExperts以开放源码形式开发,以自由软件形式来发布。 作者鼓励用户下载源代码研究和提交Bug报告、修正补丁以及新特性的增加。软件的网址是www.gexperts.org。(注:在最新的Delphi Informant Magazine的读者选择奖评比中GExperts获得了2000年度最佳开放源码工具的荣誉)。
安装GExperts后,会在Delphi的IDE中添加一个GExperts的菜单,对应于全部的Gexperts提供的专家,如下图4.1所示意:
其中每一个菜单项都对应着功能强大的开发工具,其中让我们首先来研究GExperts的配置。
GExperts配置
要想配置GExperts,直接选菜单命令GExperts Configuration会显示一个配置属性页对话框。
通过对话框,我们可以对专家,文件放置地点,编辑器专家和IDE增强特性,控件面板增强特性,以及代码编辑器工具条的增强特性进行配置。上图中属性页的第一页,允许我们通过专家名前的CheckBox来开关专家在菜单上的显示,同时我们还可以配置激活相应专家的热键。同时某些专家名后还有一个Config按钮可以对相应专家进行更详细的配置,这将会在后面进行更详细的讲解。
第二个属性页是文件位置的设定属性页,可以用来设定缺省的VCL源码目录和Gexperts的缺省目录,通常条件下不需要更改。
第三个属性页是对编辑器专家进行设定(见下图4.3),编辑器专家只有当代码编辑器获得焦点时才有效,它可以对源码执行很多功能。其中列表框中每个编辑器专家的快捷键可以通过点击Shortcut按钮来设定,注意相互之间不要冲突。其中一些专家还支持使用Config按钮进行进一步配置。每个专家的功能在下面的文本框中进行了描述。
Comment Code专家:当我们要注释代码时,可以先选择要注释的代码行,然后使用快捷键激活专家,专家就会自动添加注释了,按Config按钮可以对注释符号进行指定。
UnComment Code专家:顾名思义,选择要去掉注释的代码,用快捷键激活专家,专家会自动去掉注释。
Insert Date/Time专家:对于一个复杂的程序来说,很好的注释无疑是非常必要的。这个专家把当前日期和时间插入到代码编辑器的光标位置。日期时间字符串可以也是可配置的。这个专家对于我们想记录修改代码的日期很有用。
Locate Matching Delimiter专家:这个专家可以帮助我们快速选择一个相互匹配的定界符的整个范围,支持的定界符包括begin, try, case, repeat, '('和'['。用法:我们按下快捷键时,如果光标位置处是begin,那么同它相对应的end之间的所有代码都会被选定。这可以极大的方便我们复制代码。
Move to Matching Delimiter专家:这个专家可以用来定位匹配相对应的定界符,比如如果当前光标位置为Begin,按快捷键就会移动光标到同Begin相对应的End字符串。它支持的定界符同上面相同。
Insert Unit Header专家:这个专家允许通过Config按钮添加定制的单元标题头,单元头是可高度定制的并支持通过宏替换来插入有用的信息。支持的宏列表如下:
%PROJECTDIR% - 项目工作目录。
%PROJECTNAME% - 项目名称。
%PROJECTGROUPDIR% - 项目组目录。
%PROJECTGROUPNAME% - 项目组名。
%UNIT% - 当前单元名。
%DATETIME% - 日期和时间。
%DATE% - 日期。
%YEAR%, %MONTH%, %DAY% - 年,月,日。
%MONTHSHORTNAME%, %MONTHLONGNAME% - 月份名。
%DAYSHORTNAME%, %DAYLONGNAME% - 日子名。
%HOUR%, %MINUTE%, %SECOND% - 时,分,秒。
%PROCNAME%-当前光标后的过程名。
Insert Procedure Header专家:同Insert Unit Header专家类似,只不过是用来给过程添加题头的,并且支持相同的宏。
最后一个是delphi的头文件和作者注释以及函数过程注释。可设置快捷键。
第四个属性页可以对IDE增强功能进行设定(见下图4.4),GExperts IDE增强专家使用了非常底层的技术来直接控制IDE的内部功能,通过点选Disable all IDE enhancements checkbox我们可以禁止一切对IDE功能的增强。
打开Tab Dock Hosts这项功能后,当停靠多个工具窗口时Gexperts可以迫使IDE使用多栏属性页。打开这项功能后,工具窗体停靠的效果如下图4.5所示:
对菜单功能的增强:同时Gexperts还可以为IDE主菜单添加一个Windows菜单,在这个菜单中会列出当前所有可见的IDE窗口,便于我们快速选择,另外我们还可以对菜单项按字母排序。
定制字体:我们还可以利用Gexperts修改组件面板和属性察看器的字体,换成我们自己喜欢的风格。此外,还有很多对于Delphi 3,4的增强,由于已经过时,这里不再详细讨论。
上图4.6中第五个属性页可以用来设定组件面板的显示特性,我们可以选择打开多行属性页的显示功能,这样就可以同时看到全部的控件组,这对于像我这样的控件收集狂来说,就无须来回滚动面板才能选择要用的组件了,是一项非常实用的功能。效果见下图4.7:
同时打开这项功能后,我们还可以设定是否允许反向滚动和锯齿状排布组件属性页。另外,Gexperts还允许我们选择是否以按钮形式或超平样式显示属性页(打开Show Tabs as Button功能)。
此外,如果我们即想快速切换组件面板,又为了节约屏幕空间而不想打开多行显示功能,我们可以把组件分类添加到组件面板的右键菜单中(打开Add Components name to popmenu),并且菜单项是可以按字母排序的。
第六个属性页就是编辑器的增强功能了(见下图4.8):
Gexperts编辑器增强功能包括以下几个方面:
打开编辑器属性页的热点追踪功能(实际上就是鼠标所悬浮的页面标题会变兰,我觉得这纯属一项极其无聊的功能)。以按钮方式显示属性页面标签,这也是一项可有可无的功能。为编辑器添加一个工具条(位置可设定为顶部,或左侧或右侧,下部等)。缺省条件下,会为编辑器添加剪切,复制,粘贴,撤销和还原的功能按钮。(效果见下图4.9)
最后一个配置属性页还是同编辑器的工具条有关,它可以定制工具条的按钮(见下图4.10)。
通过定制工具条,我们可以把我们最常用的功能(功能被分成文件,编辑,查找,视图等几大类列在左边的两个列表框中,可以使用两个箭头按钮向工具条中添加或删除)集成在编辑器中,但对我来说,首先工具条比较占地方(主要是我的显示器太小,只有14寸),另外我觉得用键盘的快捷方式更快一些,所以我更喜欢禁止工具条的特性。
其他专家
Gexperts还提供了其他大量有用的专家模块,它们是同Gexperts的菜单项相一一对应的,现在让我们一一展现它们的功能。
Procedure List专家
点击Procedure List菜单项后就会调出它的界面来(见下图4.11)。procedure list专家可以显示当前单元中的全部过程列表,支持单元名的渐近式查找,并能双击过程列表项来自动跳转到过程实现部分。
使用界面右侧的下拉列表框,我们还可以根据过程所属对象过滤要显示的过程名。另外专家还提供了两种模式的搜索方式(按界面上方的按钮来切换),第一种方式渐近查找将从头开始匹配输入的过程名,而第二种查找方式将在过程名的任意位置匹配输入字符串,比如输入ssign来查找过程的话,第二种方式能找到TMyObject.Assign和TMyObject.AssignWidget,而按第一种方式,则这两个方法都找不到。
Experts Manager专家
Expert manager专家(见下图4.12)主要是用来方便地添加,激活,禁止和删除DLL类型的专家的工具,有了它,我们就无须直接编辑注册表来注册专家了。下图中红色的叉表示当前专家被禁止,而绿色的挑表示专家被激活。如果一个专家名前面有一个红点就表示专家状态被改变了,但需要重新启动IDE来使状态改变生效。
Clipboard History专家
Clipboard History专家可以记录剪贴板操作的历史记录(见下图4.13),我们可以通过双击列表项来重新复制剪贴板的内容,或选定一列表项然后按Copy按钮,另外Purge按钮是用来清空保存的列表项的。
注意:缺省时,Clipboard History专家不会记录复制动作的,我们必须在GExperts 配置对话框中的专家列表中点专家右侧的Configure按钮来进行配置(见下图4.13)。我们可以改变缺省为20的历史保存数。我们还可以配置专家使其在IDE启动后就记录复制动作。还有要说明的就是,这个专家只能记录对文本的复制操作,它不能记录对位图或控件的复制操作。
Grep Search专家
Grep Search专家是我最喜欢也是最常用到的专家(见下图4.14),它可以快速的在文本中定位字符串,功能比Delphi内置的查找工具要强大多的多的多。它可以轻松的限定查找范围,我们可以选择查找当前文件,或者全部打开的文件,当前项目中的全部文件(包括DFM文件),或者一个指定目录下的全部文件(并可以选定是否对其子目录查找)。同时GExperts还提供了一个独立的Grep.exe的可执行程序,可以让我们在不启动Delphi的情况下调用。
下面是界面中各个选项的配置说明:
Text to Find:我们可以在这个编辑框中输入要查找的文本或正则表达式。
Options选项是用来设定查找标准的:
Case sensitive:确定查找是否大小写敏感。
Ignore comments:确定查找时是否忽略注释。
Whole word:是否进行整字匹配。
Search DFM files:是否同时查找单元文件所对应的DFM文件。
Regular expression:是否使用正则表达式来查找
Where选项是用来限定查找范围的:
Current file only:只查找当前打开文件。
All files in project:查找当前项目中所有文件。
Open project files:查找全部打开的项目文件。
Search in directories:查找指定目录下的全部文件。
Search directory options选项用来指定按目录查找文件时的目录名和查找文件的掩码(这个选项只有当我们选择了在目录下查找后才会生效):
Directory:我们可以在编辑框中输入要查找的目录名,也可以按下面按钮来设定。
点这个按钮可以弹出一个浏览文件夹对话框来指定目录。
点这个按钮会把目录名自动设定为VCL源码所在目录名(通常来说我要查找某个函数所对应的单元名时,都是按VCL目录查找)。
点这个按钮会自动设定RTL (运行时库)源码所在目录为查找目录。
File masks:允许我们限定查找的文件类型,通常设置为*.pas,*.dpr。
Include subdirectories:指定是否查找子目录,通常我们都应该打开这个选项。
设定好所有的查找选项之后,点OK按钮,就会开始查找,随着查找进行就会结果就会显示在Grep Results窗口中(见下图4.15)。
Grep Results使用一个类似可折叠的界面方式来允许我们轻松的定位匹配字符串。上图中结果窗口会显示所有包含查找字符串的文件,在每个文件下一系列的匹配都会显示出来,要想展开或收缩匹配显示,只要点击文件名即可。
在每个匹配的左侧显示的数值是查找字符串所在的行号,同时结果窗口会高亮显示匹配的字符串,另外在文件名右侧的数值表示在当前文件中所找到的匹配数。要想打开匹配的文件,我们只需双击匹配结果行就可以了,编辑器会自动定位到匹配字符串的位置。
小技巧:我们可以从结果列表中拖放文件到其他运行的程序,比如写字板,相应的程序会自动打开被拖放的文件。当运行单独的Grep.exe程序时,双击文件名会打开它相关联的应用程序。
Message Dialog专家
这个专家的意义不是很大,就是对MessageDlg函数进行包装,可以可视化的编辑MessageDlg的函数,感觉上更像一个组件编辑器,另外由于MessageDlg显示的都是英文信息,所以我很少用它,这里就不介绍了。
Backup Project专家
经常备份项目文件无疑是个很好的习惯这个专家可以把全部项目文件备份到一个Zip文件中,当专家运行后,会显示一个对话框,对话框中会显示当前项目中的全部文件列表(见下图4.16)。我可以按Add和Remove按钮来添加或删除文件。也可以使用Add With Wildcar和Remove with Wildcard按钮按照通配符来添加或删除一组文件。设定好文件列表后,要备份整个项目,只要点Backup按钮就可以了。
另外我们还可以配置备份专家使其能更灵活的备份,如果我们在文件加入$I, $R, $INCLUDE和$RESOURCE编译器指令的话,专家就会根据指令查找资源和其他相关文件。另外专家即可以备份当前项目,也可以备份项目组,这可以通过配置下图4.17中的Gexperts配置窗口来进行。
我们还可以强制添加某些文件,比如如果我们的项目中要使用一个INI配置文件,而想要把它包括在备份中的话,可以在单元文件中添加#BACKUP MYINI.INI字符串,专家就会自动把它添加到备份中去。
密码保护和保存原始路径名也可以通过选项进行配置。通过设定Auto Save to Directory选项,我们还可以让专家自动备份项目到指定的目录而无须手动干预。通过各种宏定义,我们可以指定备份使用的目录和文件名。下面是支持的宏列表:
%PROJECTDIR% - 项目目录。
%PROJECTNAME% - 项目名。
%PROJECTGROUPDIR% - 项目组目录。
%PROJECTGROUPNAME% - 项目组名。
%YEAR% - 用四位数值表示的年。
%MONTH% - 月份。
%MONTHSHORTNAME% - 短月份名。
%MONTHLONGNAME% - 长月份名。
%DAY% - 日子。
%DAYSHORTNAME% - 短日子名。
%DAYLONGNAME% - 长日子名。
%HOUR% - 小时。
%MINUTE% - 分钟。
%SECOND% - 秒。
下面这个例子将会将项目备份到项目目录下的Backup子目录,并根据项目名和年月日来设定文件名。
%PROJECTDIR%/Backup/%PROJECTNAME%%YEAR%%MONTH%%DAY%
Set Tab Order专家
由于Delphi5的IDE本身提供了这项功能,所以这里就不介绍了。
Clean Directorys专家
多次编译调试程序后,Delphi总会在项目目录下生成很多无用的临时文件。这个专家就可以帮助我们快速的删除开发过程生成的常见的几种不重要的文件。当它被激活时,会显示项目文件所在目录的列表,点中目录前的CheckBox表明将会递归查找相应目录下的无用文件。然后可以在下面的列表中选择要删除的文件类型(见下图4.18)。另外我们还可以按Add按钮来手工添加要删除的目录和要删除的特定后缀的文件。点Clean按钮就可以删除文件了,不过由于这个功能有一定危险性,一定要慎重使用!
Favorite Files专家
Favorite Files专家可以以一种很方便树状结构来分类管理我们常用的文件。我们可以创建一个新的目录,然后调用New菜单命令添加任意类型的文件(操作界面见下图4.19)。添加完文件后,我们还可以调用属性对话框编辑它们的属性。每个文件都对应一个文件名,显示名,描述文字和执行方式。执行方式决定了当用户双击项目时专家如何处理执行的操作。下面是执行方式列表:
IDE: 把文件加载进IDE。
Shell: 使用ShellExecute API来调用缺省的程序处理相应文件。
Custom: 手工指定一个程序来打开文件。
Project: 把文件作为一个新的项目加载进IDE。
专家还内置了一个文件察看器,可以察看一些常见的文件类型,比如PAS, DPR, RTF, HTML, BMP, SQL, C, CPP, TXT等。另外这个专家还支持拖放,我们可以把文件从资源管理器拖放到文件列表来快速的添加新的项目。
Class Browser专家
由于这个专家和Delphi5内置的Browse Symbol工具的功能大同小异,所以这里就不介绍了。
Source Export专家
这个专家也是我常用到的一个工具,它可以根据当前IDE的语法颜色设置或自定义的设置,把当前编辑器中选定的代码按HTML 或RTF格式复制到剪贴板上或保存成文件,这样我用word写文章时,粘贴来的代码就会保持原来的颜色设定,简直太有帮助了(界面见下图4.20)。要注意的是:专家不仅支持 Object Pascal语法,还支持C/C++,HTML和SQL语法。唯一比较讨厌的是它不支持中文,只要是代码中有中文注释,它都会把它转化****符号。
Code Librarian专家
在编程中经常整理可重用的代码是个很好的编程习惯,而Code Librarian专家可以让这一切变得更轻松。它由两个面板组成,左侧的面板设定代码分类,而右侧面板用来显示代码。 Code Librarian还支持库中代码同IDE之间的相互复制。另外点击Find按钮我们可以按代码或标题进行查找。
ASCII Chart专家
ASCII Chart专家(见下图4.22)可以显示一个指定字体所有的ASCII号码值。点击ASCII号码将复制相应的ASCII号码到编辑框中。
PE Information专家
这个专家可以用来察看可执行文件如EXE,DLL,OCX文件的PE文件头信息,通常很少会用到,所以这里就不介绍了。
Replace Components专家
这个专家可以使开发者很容易的替换窗体或项目中的控件,比如当我们想用TButton控件替换项目中所有的TbitBtn控件时,这个专家可以最大限度的保留原有控件的属性。使用这个专家时,首先选择要替换的控件,然后选择要被替换的控件类型。然后点OK就可以了。注意:这个专家不会保存指向其他控件的属性,和Tcollection类型或更复杂的属性比如TStringList。它只对简单的属性类型有效,操作界面见下图4.23:
Component Grid专家
这个专家允许开发者很方便地集中编辑窗体上所有控件的Tag和HelpContext属性,而不用麻烦的进行手工设定。操作界面示意如下图4.24所示:
IDE Menu ShortCuts专家
这个专家可以修改IDE的菜单的快捷方式,要改变菜单项的快捷方式,选择要修改的菜单项,然后打开ShortCut Expert for this menu item选项,然后,输入合适的快捷方式即可。操作界面见下图4.25:
Project Dependencies专家
这个专家可以根据单元文件的uses部分列出单元之间相互依赖的关系列表。按下Refresh按钮可以即时更新依赖关系的信息。依赖关系示意图见下图4.26所示:
Perfect Layout专家
这个专家可以用来定制并保存IDE界面布局,但在Delphi5中提供的Save Desktop特性和它功能相同,所以这里就不介绍了。
To Do List专家
同样的,Delphi 5内置了一个To Do List工具,因此这里也不介绍了。
Code Proofreader专家
Code Proofreader又是一个我非常喜欢的工具,它可以根据可定制的词典来纠正我的输入的代码的错误,比如它会把Tbale自动纠正为Table。我们很容易的添加和删除易错的单词。操作界面示意如下图4.27所示:
另外编译器校正选项使得Gexperts调用底层的Object Pascal编译器接口来为当前光标处单词生成一个上下文敏感的匹配单词列表。小心使用这个选项,因为IDE会在我们每次按下非字母键时重新编译项目中的一部分,这会使得输入变得很慢。
专家还提供了很多选项来微调基于词典的校正,由于这些选项区别过于微细这里就不详细讨论了,通常我们使用缺省的配置就完全够用了。
Project Option Sets专家
使用这个专家,我们可以编辑,保存和加载Project | Options菜单命令调出的对话框内的选项,不过用处不是很大,这里就不详细讨论了。
Priority Booster专家
它钩进IDE的编译器通知器中,可以修改进程的优先级和应用程序的线程优先级,并可以使Windows分配更长的时间片给Delphi,这样编译的速度就会提高。同样由于Code Insight同样使用了编译技术,因此也会被加速。整个的操作界面如下图4.28所示:
Components To Code
这个专家允许我们把当前选定的多个控件转化合适的代码并复制到剪贴板上,其中代码的属性部分是完全根据控件的属性来生成的,这个专家在我们想要动态建立一个控件时可以节省我们敲代码的时间,比如我选定一个TButton控件后,运行专家会生成如下代码:
var
Button1: TButton;
Button1 := TButton.Create(Self);
with Button1 do
begin
Name := 'Button1';
Parent := Self;
Left := 136;
Top := 80;
Width := 75;
Height := 25;
Caption := 'Button1';
TabOrder := 0;
end;
要注意的是:这个专家无法转化二进制属性比如位图为实际代码,但会生成注释来提示我们手工修改代码。同样的,它也不能为对象引用生成代码。
最后,要提到的是Gexperts还提供了一个Gdebug.exe的程序,它非常类似于CodeSite的功能,也是用于发送调试消息的,当然比CodeSite的功能要弱很多,不过唯一的好处是它是免费的,而CodeSite是要花钱的,但由于它的功能不够强大,这里就不介绍了。还需特别指出的是,作为一个开放源码的项目,Gexperts提供了大量可以学习的专家编程技巧特别是Open Tools API方面,仔细研究它的代码的话,我们可以学到很多很多东西。有兴趣的朋友一定不要错过啊。