CnPack Forum


 
Subject: 可否增加中文语法扩展功能?
zy1227
新警察
Rank: 1



UID 1872
Digest Posts 0
Credits 2
Posts 2
点点分 2
Reading Access 10
Registered 2006-2-22
Status Offline
Post at 2006-2-23 12:05  Profile | Blog | P.M. 
可否增加中文语法扩展功能?

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


Image Attachment: preview.gif (2006-2-23 12:05, 41.51 K)

Top
zjy
管理员
Rank: 9Rank: 9Rank: 9



UID 2
Digest Posts 6
Credits 2385
Posts 1543
点点分 2385
Reading Access 102
Registered 2002-12-16
Location China
Status Offline
Post at 2006-2-24 09:02  Profile | Site | Blog | P.M. 
就是有些花工夫,要自己把设计期和运行期所有涉及到名称检查的地方都修改掉。

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.





Zhou JingYu
CnPack Administrator
http://www.cnpack.org/
Top
yzdbs
新警察
Rank: 1


UID 547
Digest Posts 0
Credits 36
Posts 31
点点分 36
Reading Access 10
Registered 2004-10-29
Location 北京
Status Offline
Post at 2006-2-24 10:38  Profile | Site | Blog | P.M.  | QQ
Delphi2005以上版本 就已经带这个功能了


Image Attachment: {A3B17B37-6A2C-41BC-A728-0986E15D4574}.JPG (2006-2-24 10:38, 105.05 K)





暂时没有呐。。。...
Top
zy1227
新警察
Rank: 1



UID 1872
Digest Posts 0
Credits 2
Posts 2
点点分 2
Reading Access 10
Registered 2006-2-22
Status Offline
Post at 2006-2-24 18:28  Profile | Blog | P.M. 
呵呵,我试过Delphi2006,但是组件是不能用中文命名的。
Top
MSTAR
普通灌水员
Rank: 2



UID 897
Digest Posts 0
Credits 98
Posts 58
点点分 98
Reading Access 10
Registered 2005-6-11
Location 海南
Status Offline
Post at 2006-2-28 11:37  Profile | Site | Blog | P.M.  | QQ
太过分了

还是习惯了用 E 文
Top
agamem
新警察
Rank: 1



UID 530
Digest Posts 0
Credits 16
Posts 16
点点分 16
Reading Access 10
Registered 2004-9-30
Status Offline
Post at 2006-2-28 12:58  Profile | Blog | P.M. 
敲中文不嫌累么??
Top
 




All times are GMT++8, the time now is 2024-11-23 22:18

    本论坛支付平台由支付宝提供
携手打造安全诚信的交易社区 Powered by Discuz! 5.0.0  © 2001-2006 Comsenz Inc.
Processed in 0.016037 second(s), 9 queries , Gzip enabled

Clear Cookies - Contact Us - CnPack Website - Archiver - WAP