CnPack Forum


 
Subject: 代码输入助手之括号/引号自动完成之简单实现
xiong2001
新警察
Rank: 1



UID 1099
Digest Posts 0
Credits 5
Posts 5
点点分 5
Reading Access 10
Registered 2005-9-28
Status Offline
Post at 2005-9-30 17:37  Profile | Blog | P.M. 
代码输入助手之括号/引号自动完成之简单实现

环境:windows2000sp4 + delphi7.1
CnWizards源码版本:V0.7.8.143 stable

在CnInputHelper.pas中加入如下代码(代码前有+标记的为功能实现代码)
function TCnInputHelper.HandleKeyDown(var Msg: TMsg): Boolean;
+const
+  VK_9:Integer=$39;                 // 9按键
+  VK_OEM_7:Integer=$DE;  // '按键
var
  Shift: TShiftState;
  ScanCode: Word;
  Key: Word;
  Col, Row:Integer;
begin
......
......
  // 按下 Alt 或 Ctrl 时关闭
  if Shift * [ssAlt, ssCtrl] <> [] then
  begin
    HideAndClearList;
    Exit;
  end;

  // Shift 键不需要处理
  if Key = VK_SHIFT then
    Exit;

+  // 括号自动完成
+  if Key = VK_9 then
+    if Shift = [ssShift] then
+    begin
+      CnOtaGetCurSourcePos(Col,Row);
+      CnOtaInsertTextToCurSource(')');
+      CnOtaSetCurSourcePos(Col, Row);
+    end;

+  // 单引号自动完成   
+  if Key = VK_OEM_7 then
+  begin
+     CnOtaGetCurSourcePos(Col,Row);
+     CnOtaInsertTextToCurSource(chr($27));
+     CnOtaSetCurSourcePos(Col, Row);
+  end;  

......
......
end;
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 2005-9-30 21:12  Profile | Site | Blog | P.M. 
厉害!

看来 xiong2001 对这部分代码比较熟悉了:)

不过这段代码可能有些小问题,不是所有的键盘布局 ( 键都在 9 上面的,有些在 8 上面。同样,引号也有类似的问题。

另外,上面的代码是基于上一次发布的版本修改的。当前的开发版本中,编辑器控件按键 Hook 功能已经单独提到公共单元中了,编辑器扩展中新加了一个单元 Source\SrcEditorEnhance\CnSrcEditorKey.pas 专门负责处理按键扩展,如自动缩进、Home扩展等。括号自动完成的功能也将放到新的单元中。xiong2001 有兴趣也可以从 CVS 中下载最新的代码来看看。




Zhou JingYu
CnPack Administrator
http://www.cnpack.org/
Top
 




All times are GMT++8, the time now is 2024-11-10 13:50

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

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