Board logo

Subject: 可否增加中文语法扩展功能? [Print This Page]

Author: zy1227    Time: 2006-2-23 12:05     Subject: 可否增加中文语法扩展功能?

既然是中文专家包,那么使Delphi支持中文语法后就更加完美了。
目前已经有类似的功能,详见:http://mujweb.cz/www/ufospace/
能否将此功能整合进来?

Image Attachment: preview.gif (2006-2-23 12:05, 41.51 K) / Download count 388
http://bbs.cnpack.org/attachment.php?aid=207


Author: zjy    Time: 2006-2-24 09:02

就是有些花工夫,要自己把设计期和运行期所有涉及到名称检查的地方都修改掉。

CnWizards 的源码中有一个函数 Hook 单元 CnWizMethodHook.pas,下面这个例子替换掉了最基本的 IsValidIdent 函数,你可以把它放到包里面安装一下,就可以在 IDE 的设计器中使用中文组件名,不过代码编辑器还是会报错。根据这个方法,中文支持理论上是可行的,就是要花水磨功夫一处一处去修改。CnWizards 目前还不考虑开发这个功能,如果谁有兴趣,可以做为一个单独的子项目开发。

[Copy to clipboard]
CODE:
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.


Author: yzdbs    Time: 2006-2-24 10:38

Delphi2005以上版本 就已经带这个功能了

Image Attachment: {A3B17B37-6A2C-41BC-A728-0986E15D4574}.JPG (2006-2-24 10:38, 105.05 K) / Download count 435
http://bbs.cnpack.org/attachment.php?aid=208


Author: zy1227    Time: 2006-2-24 18:28

呵呵,我试过Delphi2006,但是组件是不能用中文命名的。
Author: MSTAR    Time: 2006-2-28 11:37     Subject: 太过分了

还是习惯了用 E 文
Author: agamem    Time: 2006-2-28 12:58

敲中文不嫌累么??




Welcome to CnPack Forum (http://bbs.cnpack.org/) Powered by Discuz! 5.0.0