2017-6-16 08:38
jazzson
(已经解决) 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.
[[i] 本帖最后由 jazzson 于 2017-6-19 15:08 编辑 [/i]]
2017-6-21 15:45
jazzson
回复 #7 Passion 的帖子
必须的 :lol ,配置了几个热键之后,还是非常方便的 。 推荐键盘党使用
//热键 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.