就是有些花工夫,要自己把设计期和运行期所有涉及到名称检查的地方都修改掉。
CnWizards 的源码中有一个函数 Hook 单元 CnWizMethodHook.pas,下面这个例子替换掉了最基本的 IsValidIdent 函数,你可以把它放到包里面安装一下,就可以在 IDE 的设计器中使用中文组件名,不过代码编辑器还是会报错。根据这个方法,中文支持理论上是可行的,就是要花水磨功夫一处一处去修改。CnWizards 目前还不考虑开发这个功能,如果谁有兴趣,可以做为一个单独的子项目开发。
unit CnDelphi;
interface
uses
Windows, SysUtils, CnWizMethodHook;
implementation
type
TIsValidIdentFunc = function (const Ident: string): Boolean;
var
OldProc: TIsValidIdentFunc;
Hook: TCnMethodHook;
function CnIsValidIdent(const Ident: string): Boolean;
const
Alpha = ['A'..'Z', 'a'..'z', '_'];
AlphaNumeric = Alpha + ['0'..'9'];
var
I: Integer;
begin
Result := False;
if (Length(Ident) = 0) or (not (Ident[1] in Alpha) and (Ident[1] < #$A1)) then
Exit;
for I := 2 to Length(Ident) do
if not (Ident[I] in AlphaNumeric) and (Ident[I] < #$A1) then
Exit;
Result := True;
end;
initialization
OldProc := TIsValidIdentFunc(GetBplMethodAddress(@IsValidIdent));
Hook := TCnMethodHook.Create(@OldProc, @CnIsValidIdent);
finalization
FreeAndNil(Hook);
end.