Использование открытых интерфейсов среды программирования Delphi

unit  exmpl_05;
 
{ ОПРЕДЕЛЕНИЕ ПОЗИЦИИ КУРСОРА  }
 
interface
 
uses
 SysUtils,   Classes, Dialogs, Toollntf, Exptlntf, Editlntf, Menus;
 
type
 { класс эксперта является потомком базового класса TIExpert }
 TEMyExpert = class (TIExpert)
 private
  Menultem: TIMenuItemlntf; 
 public
  constructor Create;
  destructor Destroy; override;
  function GetName: string; override;
  function GetStyle: TExpertStyle; override;
  function GetlDString: string; override;
  procedure MenuItemClick(Sender: TIMenuItemlntf);
  function GetCursorPos: TEditPos; 
 end;
 
procedure Register;
 
{ функция, добавляющая пункт в главное мены IDE Delphi } 
function AddlDEMenuItem (const Caption, Name, PreviousItemName: string; 
 const ShortCutKey: Char; OnClick: TIMenuClickEvent): TIMenuItemlntf;
 
implementation
 
constructor TEMyExpert.Create; 
begin
 inherited Create;
 { добавляем пункт в главное меню IDE Delphi }
 Menultem := AddlDEMenuItem ('Simple Expert 5', 'ViewMyExpertltem5',
  'ViewWatchltem', '5', MenuItemClick); 
end;
 
destructor TEMyExpert.Destroy; 
begin
 Menultem.Free;
 inherited Destroy; 
end;
 
procedure TEMyExpert.MenuItemClick;
 var CurPos:  TEditPos; 
begin
 CurPos  :=  GetCursorPos; 
 if CurPos.Line > 0 then
  MessageDlg('Current file:   '   + ToolServices.GetCurrentFile + #13 + 
   'Current cursor position:   '   + IntToStr(CurPos.Line)   +
   ',   '  + IntToStr(CurPos.Col), mtlnformation,   [mbOk],   0); 
end;
 
function TEMyExpert.GetCursorPos;
 var ModuleInter face:   TIModulelnterface; 
  EditorInterface:   TIEditorInterface; 
  EditView:  TIEditView; FileName:  string; 

begin
 { определяем имя активного файла  } 
 FileName  := ToolServices.GetCurrentFile; 
 Result.Line  :=  0; 
 Result.Col   := 0;
 { для простоты: определяем позицию только в pas - файлах  }
 if ExtractFileExt(FileName)   =   '.pas'  then 
  try
   { получаем интерфейс модуля }
   ModuleInterface   := ToolServices.GetModuleInterface(FileName);
   try
    { получаем интерфейс редактора кода }
    Editorlnterface := Modulelnterfасе.GetEditorInterface;
    try
     { получаем интерфейс представления модуля в редакторе, передавая 
      методу GetView индекс нужного нам представления; 
      если файл открыт в нескольких окнах редактора  кода, то для 
      простоты берем первое  (хотя, конечно, это не совсем правильно) }
     EditView :=  Editorlnterface.GetView(0); 
     { получаем позицию курсора   } 
     Result  := EditView.CursorPos; 
    finally 
 { не забываем освободить полученные интерфейсы }
     EditView.Free; 
    end; 
   finally
    Editorlnterface.Free; 
   end; 
  finally
   ModuleInter face. Free; 
  end; 
end;
 
end.

возврат


Наш канал на Youtube

1999 1 2 3 4 5 6 7 8 9 10 11 12
2000 1 2 3 4 5 6 7 8 9 10 11 12
2001 1 2 3 4 5 6 7 8 9 10 11 12
2002 1 2 3 4 5 6 7 8 9 10 11 12
2003 1 2 3 4 5 6 7 8 9 10 11 12
2004 1 2 3 4 5 6 7 8 9 10 11 12
2005 1 2 3 4 5 6 7 8 9 10 11 12
2006 1 2 3 4 5 6 7 8 9 10 11 12
2007 1 2 3 4 5 6 7 8 9 10 11 12
2008 1 2 3 4 5 6 7 8 9 10 11 12
2009 1 2 3 4 5 6 7 8 9 10 11 12
2010 1 2 3 4 5 6 7 8 9 10 11 12
2011 1 2 3 4 5 6 7 8 9 10 11 12
2012 1 2 3 4 5 6 7 8 9 10 11 12
2013 1 2 3 4 5 6 7 8 9 10 11 12
Популярные статьи
КомпьютерПресс использует