CnPack Forum


 
Subject: (已经解决) cnpack IDE 脚本剪切、上移脚本求助,谢谢 liuxiao
jazzson
新警察
Rank: 1



UID 407076
Digest Posts 0
Credits 20
Posts 7
点点分 20
Reading Access 10
Registered 2017-6-7
Status Offline
Post at 2017-6-16 08:38  Profile | Blog | P.M. 
(已经解决) cnpack IDE 脚本剪切、上移脚本求助,谢谢 liuxiao

一直觉得,在实际的开发过程中。对光标所在行有几个很小,但对效率却很重要的操作<br />
1、直接复制<br />
2、直接删除<br />
3、上(或者下)移一行<br />
<br />
这几个操作,以前一直不知道如何简化。最近安装了 cnpack ,在搜索cnpack 一些使用技巧的时候发现了cnpack 的pascal 脚本增强功能,大喜!<br />
<br />
http://bbs.cnpack.org/viewthread.php?tid=6438&extra=page%3D1<br />
<br />
以论坛里面的??[脚本] CnWizards 脚本交流 为模板,实现了复制当前行功能,但是因为没有 cnpack 脚本函数的文档。目前下面脚本仍然存在问题,请各位大能帮忙<br />
<br />
1、光标当前行上移(或下移),存在问题: 没有运行成功<br />
program MoveUp;<br />
uses<br />
??Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Clipbrd;<br />
var<br />
??Lines: TStringList;<br />
??Clipboard: TClipboard;<br />
??i: Integer;<br />
begin<br />
??Lines := TStringList.Create;<br />
??Clipboard := TClipboard.Create;<br />
??try<br />
? ? if IdeGetEditorSelectedLines(Lines) then<br />
? ? begin<br />
? ?? ?Clipboard.Clear;<br />
? ?? ?Clipboard.AsText := Lines.Text;<br />
? ? end;<br />
? ? ? ? <br />
? ? if Clipboard.HasFormat(1)? ?then<br />
? ? begin<br />
? ?? ?if IdeGetEditorSelectedLines(Lines) then<br />
? ?? ?begin<br />
? ? ? ? ? ? ? ? lines.clear;<br />
? ?? ???Lines.Text := Clipboard.AsText + Lines.Text;<br />
? ?? ???IdeSetEditorSelectedLines(Lines);<br />
? ?? ?end;<br />
? ? end;? ? ? ? <br />
??finally<br />
? ? Lines.Free;<br />
? ? Clipboard.Free;<br />
??end;<br />
end.<br />
<br />
<br />
2、剪切光标当前行,存在问题:删除当前行后光标会下移(比如删除第 14 行,脚本运行之后不但删除了第十四行,光标也跳到了第 15 行,能否在删除之后,让光标仍然保留在第十四行呢?)<br />
<br />
program DeleteLinesPlus;<br />
uses<br />
??Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Clipbrd;<br />
var<br />
??Lines: TStringList;<br />
??Clipboard: TClipboard;<br />
begin<br />
??Lines := TStringList.Create;<br />
??Clipboard := TClipboard.Create;<br />
??try<br />
? ? Lines.Clear;<br />
? ? IdeSetEditorSelectedLines(Lines);<br />
??finally<br />
? ? Lines.Free;<br />
? ? Clipboard.Free;<br />
??end;<br />
end.

[ 本帖最后由 jazzson 于 2017-6-19 15:08 编辑 ]
Top
Passion (LiuXiao)
管理员
Rank: 9Rank: 9Rank: 9


UID 359
Digest Posts 19
Credits 6499
Posts 3430
点点分 6499
Reading Access 102
Registered 2004-3-28
Status Offline
Post at 2017-6-18 20:06  Profile | Blog | P.M. 
第二个脚本不对吧?代码里并没有对剪贴板的操作,再说Clipboard也无需Create,直接用全局变量Clipboard即可。
Top
Passion (LiuXiao)
管理员
Rank: 9Rank: 9Rank: 9


UID 359
Digest Posts 19
Credits 6499
Posts 3430
点点分 6499
Reading Access 102
Registered 2004-3-28
Status Offline
Post at 2017-6-18 20:17  Profile | Blog | P.M. 
另外,脚本相关专家也不是完全没文档。

安装目录的PSDeclEx目录下,CnWizIdeUtils里有各个函数的说明,开头的几个函数包括文字处理与光标移动的函数应该能满足你的要求。
Top
jazzson
新警察
Rank: 1



UID 407076
Digest Posts 0
Credits 20
Posts 7
点点分 20
Reading Access 10
Registered 2017-6-7
Status Offline
Post at 2017-6-19 12:21  Profile | Blog | P.M. 
回复 #2 Passion 的帖子

呵呵,刚开始用 cnpack ,正在熟悉 Cnpack IDE 中! 上面的脚本都是从论坛<br />
<br />
CnPack Forum ? 源阅读专用 ? [脚本] CnWizards 脚本交流<br />
<br />
里头的模板稍微修改了一下,可能改的有点问题

[ 本帖最后由 jazzson 于 2017-6-19 21:06 编辑 ]
Top
jazzson
新警察
Rank: 1



UID 407076
Digest Posts 0
Credits 20
Posts 7
点点分 20
Reading Access 10
Registered 2017-6-7
Status Offline
Post at 2017-6-19 12:22  Profile | Blog | P.M. 
回复 #3 Passion 的帖子

&lt;img src="images/smilies/lol.gif" smilieid="9" border="0" alt="" /&gt;??谢谢! &lt;br /&gt;<br />
&lt;br /&gt;<br />
<br />
谢谢指点,看着函数简要说明把脚本改了一下,已经成功了!

[ 本帖最后由 jazzson 于 2017-6-19 21:07 编辑 ]
Top
jazzson
新警察
Rank: 1



UID 407076
Digest Posts 0
Credits 20
Posts 7
点点分 20
Reading Access 10
Registered 2017-6-7
Status Offline
Post at 2017-6-19 16:53  Profile | Blog | P.M. 
回复 #2 Passion 的帖子

谢谢 LIUXIAO 帮忙,问题已经解决<br />
<br />
结贴!

[ 本帖最后由 jazzson 于 2017-6-19 21:24 编辑 ]
Top
Passion (LiuXiao)
管理员
Rank: 9Rank: 9Rank: 9


UID 359
Digest Posts 19
Credits 6499
Posts 3430
点点分 6499
Reading Access 102
Registered 2004-3-28
Status Offline
Post at 2017-6-20 09:49  Profile | Blog | P.M. 
可以把代码贴出来让大伙共享共享。
Top
jazzson
新警察
Rank: 1



UID 407076
Digest Posts 0
Credits 20
Posts 7
点点分 20
Reading Access 10
Registered 2017-6-7
Status Offline
Post at 2017-6-21 15:45  Profile | Blog | P.M. 
回复 #7 Passion 的帖子

必须的    ,配置了几个热键之后,还是非常方便的 。 推荐键盘党使用

//热键 ctrl+D
program DeleteLinesPlus;
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Clipbrd;
var
  Lines: TStringList;
  col,row:integer;
begin
  Lines := TStringList.Create;

  //取当前行列坐标
  IdeEditorGetEditPos(col,row);
  try
    if IdeGetEditorSelectedLines(Lines) then
    begin
      //  将选中的行保存如剪贴板
      Clipboard.Clear;
      Clipboard.AsText := Lines.Text;
      //清除原有的内容
      Lines.Clear;
      IdeSetEditorSelectedLines(Lines);
      //光标上移一行
      IdeEditorGotoEditPos(col,row-1,true);
      IdeGetEditorSelectedLines(Lines);
      Lines.Text := Clipboard.AsText + Lines.Text;
      IdeSetEditorSelectedLines(lines);
      IdeEditorGotoEditPos(col,row-1,true);
    end;
  finally
    Lines.Free;
    Clipboard.Free;
  end;
end.

//热键 ctrl+L
program DuplicateLine;
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Clipbrd;
var
  Lines: TStringList;
  Clipboard: TClipboard;
  i: Integer;
begin
  Lines := TStringList.Create;
  Clipboard := TClipboard.Create;
  try
    if IdeGetEditorSelectedLines(Lines) then
    begin
      Clipboard.Clear;
      Clipboard.AsText := Lines.Text;
    end;

    if Clipboard.HasFormat(1)   then
    begin
//      if IdeGetEditorSelectedLines(Lines) then
//      begin
//        IdeSetEditorSelectedLines(Lines);
//      end;
      if IdeGetEditorSelectedLines(Lines) then
      begin
        Lines.Text := Clipboard.AsText + Lines.Text;
        IdeSetEditorSelectedLines(Lines);
      end;

    end;
  finally
    Lines.Free;
    Clipboard.Free;
  end;
end.

//热键 ctrl+Down
program MoveDn;
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Clipbrd;
var
  Lines: TStringList;
  col,row:integer;
begin
  Lines := TStringList.Create;

  //取当前行列坐标
  IdeEditorGetEditPos(col,row);
  try
    if IdeGetEditorSelectedLines(Lines) then
    begin
      //  将选中的行保存如剪贴板
      Clipboard.Clear;
      Clipboard.AsText := Lines.Text;
      //清除原有的内容
      Lines.Clear;
      IdeSetEditorSelectedLines(Lines);
      //光标上移一行
      IdeEditorGotoEditPos(col,row+1,true);
      IdeGetEditorSelectedLines(Lines);
      Lines.Text := Clipboard.AsText + Lines.Text;
      IdeSetEditorSelectedLines(lines);
      IdeEditorGotoEditPos(col,row+1,true);
    end;
  finally
    Lines.Free;
    Clipboard.Free;
  end;
end.

//热键 ctrl+up
program MoveUP;
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Clipbrd;
var
  Lines: TStringList;
  col,row:integer;
begin
  Lines := TStringList.Create;

  //取当前行列坐标
  IdeEditorGetEditPos(col,row);
  try
    if IdeGetEditorSelectedLines(Lines) then
    begin
      //  将选中的行保存如剪贴板
      Clipboard.Clear;
      Clipboard.AsText := Lines.Text;
      //清除原有的内容
      Lines.Clear;
      IdeSetEditorSelectedLines(Lines);
      //光标上移一行
      IdeEditorGotoEditPos(col,row-1,true);
      IdeGetEditorSelectedLines(Lines);
      Lines.Text := Clipboard.AsText + Lines.Text;
      IdeSetEditorSelectedLines(lines);
      IdeEditorGotoEditPos(col,row-1,true);
    end;
  finally
    Lines.Free;
    Clipboard.Free;
  end;
end.
Top
Passion (LiuXiao)
管理员
Rank: 9Rank: 9Rank: 9


UID 359
Digest Posts 19
Credits 6499
Posts 3430
点点分 6499
Reading Access 102
Registered 2004-3-28
Status Offline
Post at 2017-6-21 16:44  Profile | Blog | P.M. 
Top
 




All times are GMT++8, the time now is 2018-11-15 06:46

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

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