Board logo

Subject: 代码输入助手之括号/引号自动完成之简单实现 [Print This Page]

Author: xiong2001    Time: 2005-9-30 17:37     Subject: 代码输入助手之括号/引号自动完成之简单实现

环境: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;
Author: zjy    Time: 2005-9-30 21:12     Subject: 厉害!

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

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

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




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