Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / lazarus / 2012-02

Extending the IDE

1 message · 1 person ·

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

Reinier Napoles Martinez

thanks martin and mattias. My small expert is this way.

unit Unit1;
{$mode objfpc}{$H+}
interface
uses
  Classes,Controls, SysUtils,IDECommands,MenuIntf,Dialogs,LCLType,SrcEditorIntf,SynEdit,LCLProc,IDEMsgIntf;
procedure ExchangeLineUp(Sender: TObject);
procedure ExchangeLineDown(Sender: TObject);
procedure DuplicateLine(Sender: TObject);
procedure Register;
implementation
procedure ExchangeLineUp(Sender: TObject);
var
Editor: TSourceEditorInterface;
ASynEdit: TSynEdit;
tempStr:String;
tempStr1:String;
y: LongInt;
begin
     Editor:=SourceEditorManagerIntf.ActiveEditor;
     if Editor=nil then exit;
     if Editor.EditorControl is TSynEdit then begin
         ASynEdit:=TSynEdit(Editor.EditorControl);
         if ASynEdit.CaretY - 1 >= 1 then
         begin
           y := ASynEdit.CaretY;
           tempStr := ASynEdit.LineText;
           ASynEdit.TextBetweenPoints[Point(1, y), Point(1, y + 1)]:= ASynEdit.Lines.Strings[y - 2] +LineEnding;
           ASynEdit.TextBetweenPoints[Point(1, y-1), Point(1, y)]:=tempStr+LineEnding;
           ASynEdit.CaretY := y - 1;
         end;
     end;
end;
procedure ExchangeLineDown(Sender: TObject);
var
Editor: TSourceEditorInterface;
ASynEdit: TSynEdit;
y: LongInt;
tempStr: String;
begin
     Editor:=SourceEditorManagerIntf.ActiveEditor;
     if Editor=nil then exit;
     if Editor.EditorControl is TSynEdit then begin
        ASynEdit:=TSynEdit(Editor.EditorControl);
        if (ASynEdit.CaretY + 1 <= ASynEdit.Lines.Count) then
        begin
           y:= ASynEdit.CaretY;
           tempStr := ASynEdit.LineText;
           ASynEdit.TextBetweenPoints[Point(1, y), Point(1, y+1)]:= ASynEdit.Lines.Strings[y] +LineEnding;
           ASynEdit.TextBetweenPoints[Point(1, y+1), Point(1, y+2)]:=tempStr+LineEnding;
           ASynEdit.CaretY := y + 1;
        end;
     end;
end;
procedure DuplicateLine(Sender: TObject);
var
  Editor: TSourceEditorInterface;
  TextPos: TPoint;
  ScreenPos: TPoint;
  Filename: String;
  ASynEdit: TSynEdit;
begin
     Editor:=SourceEditorManagerIntf.ActiveEditor;
     if Editor=nil then exit;
     if Editor.EditorControl is TSynEdit then begin
         ASynEdit:=TSynEdit(Editor.EditorControl);
         ASynEdit.TextBetweenPoints[ Point(1, ASynEdit.CaretY), Point(1, ASynEdit.CaretY)] := ASynEdit.LineText+LineEnding;
     end;
     Filename:=Editor.FileName;
     ScreenPos:=Editor.CursorScreenXY;
     TextPos:=Editor.CursorTextXY;
end;
procedure Register;
var
  Key: TIDEShortCut;
  Cat: TIDECommandCategory;
  SectionLines:TIDEMenuSection;
  SectionLinesMenu:TIDEMenuSection;
  DuplicateCmd: TIDECommand;
  ExchangeLineUpCmd: TIDECommand;
  ExchangeLineDownCmd: TIDECommand;
begin
     SectionLines:=RegisterIDEMenuSection(mnuEdit,'Lines');
     SectionLinesMenu:= RegisterIDESubMenu(SectionLines,'Lines','Lines');
     Key := IDEShortCut(VK_UP,[ssCtrl,ssShift],VK_UNKNOWN,[]);
     Cat:=IDECommandList.FindCategoryByName(CommandCategoryToolMenuName);
     ExchangeLineUpCmd := RegisterIDECommand(Cat,'ExchangeLineUpCmd', 'Move up', Key, nil, @ExchangeLineUp);
     RegisterIDEMenuCommand(SectionLinesMenu, 'ExchangeLineUpCmd', 'Move line up', nil, nil, ExchangeLineUpCmd);
     Key := IDEShortCut(VK_DOWN,[ssCtrl,ssShift],VK_UNKNOWN,[]);
     ExchangeLineDownCmd := RegisterIDECommand(Cat,'ExchangeLineDownCmd', 'Move down', Key, nil, @ExchangeLineDown);
     RegisterIDEMenuCommand(SectionLinesMenu, 'ExchangeLineDownCmd', 'Move line down', nil, nil, ExchangeLineDownCmd);
     Key := IDEShortCut(VK_Q,[ssCtrl],VK_UNKNOWN,[]);
     DuplicateCmd := RegisterIDECommand(Cat,'Duplicate Line', 'Duplicate a Line', Key, nil, @DuplicateLine);
     RegisterIDEMenuCommand(SectionLinesMenu, 'DuplicateLine', 'Duplicate a Line', nil, nil, DuplicateCmd);
end;
end.

sorry for my english.

********************************************************************* En la tierra hace falta personas que trabajen m?s y critiquen menos, que construyan m?s y destruyan menos, que prometan menos y resuelvan m?s que esperen recibir menos y dar m?s que digan mejor ahora que ma?ana. Che *********************************************************************

Reply by email