第一步,我们把RegExpr.pas单元引入到CnWizard工程中。
第二步,我们需要修改CnProjectViewBaseFrm.pas单元,这是一个工程扩展工具窗体列表单元列表基类窗体,我们在这里加了上创建和销毁正则表达式对象的功能。
这样我们的所有的子类窗体就可以有正则表达式支持的功能了。包括《函数过程列表窗体》和《工程组单元列表窗体》。
在窗体的FormCreate里我们加上
[@
Expr := TRegExpr.Create;
Expr.ModifierI := True;
@]
第二行是大小写不敏感的属性设置。
然后我们在protected下面增加一个函数
function RegExpContainsText(aText,Pattern: string): Boolean;
函数的内容为
function TCnProjectViewBaseForm.RegExpContainsText(aText,Pattern: string): Boolean;
begin
Expr.Expression := Pattern;
try
Result := Expr.Exec(aText);
except
end;
end;
然后我们把CnProjectViewUnitFrm.pas单元的第435 行和436行改为如下
// if (MatchSearchText = '') or (AnsiStartsText(MatchSearchText, UnitInfo.Name)) or
// (IsMatchAny and RegExpContainsText(UnitInfo.Name, MatchSearchText)) then
if (MatchSearchText = '') or RegExpContainsText(UnitInfo.Name, MatchSearchText) then
这样,我们的工程组单元列表就支持正则表达式了。
呵呵,用了一下,发现查找效率明显比以前高多了。只要记得一点点的东西。就可以查到想到的东西。
比如。我想找出以List结尾的单元。只要输入list$就好了。想找以ABC开头的窗体。输入^abc就可以了。
更强大的功能还需要你自己多多挖掘。
第三步。给过程列表增加表达式功能。
修改CnProcListWizard.pas单元。在第2663行和下面的一行。注释掉。改成这样的
// Idx := Pos(MatchStr, UpperCase(ProcName));
// if (Idx = 1) or (IsMatchAny and (Idx > 1)) then
if RegExpContainsText(ProcName,MatchStr) then
呵呵,现在编译后,再按快键盘打开过程列表专家。
我记的有一个函数叫查找过程名称。好象叫 search后面跟一个别的东西。然后后面是name
于是我输入 sea.*name,哈哈。我们的找出来了。回车。定位到当前过程。方便了不少。