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

unit  exmpl_02;
 
{ ADD-IN ЭКСПЕРТ,  ДОБАВЛЕНИЕ ПУНКТА В   ГЛАВНОЕ МЕНЮ IDE DELPHI   }
 
interface
 
uses
 Classes,  Dialogs,  Toollntf,  Exptlntf,  Menus;
 
type
 { класс эксперта является потомком базового класса TIExpert }
 TEMyExpert = class(TIExpert)
 private
  Menultem:   TIMenultemIntf; 
 public
  constructor  Create;
  destructor Destroy;  override;
  function  GetName:   string;  override;
  function  GetStyle:   TExpertStyle;   override;
  function  GetlDString:   string;  override;
  procedure MenultemСlick(Sender:   TIMenuItemlntf); 
 end;
 
procedure Register;
 
{ функция, добавляющая пункт в главное меню IDE Delphi  } 
function AddIDEMenultem   (const  Caption,  Name,   PreviousItemName:   string; 
 const   ShortCutKey:   Char;   OnClick:   TIMenuClickEvent):   TIMenuItemlntf;
 
implementation
 
constructor  TEMyExpert.Create; 
begin
 inherited  Create;
 { добавляем пункт в   главное меню IDE Delphi:
  1} текст вставляемого пункта меню -   'Simple Expert   2';
  2) идентификатор  вставляемого пункта меню  -   'ViewMyExpertItem2';
  3) идентификатор пункта меню, перед  которым добавляется новый пункт
   меню -   'ViewWatchItem';
  4} горячая  клавиша вставляемого пункта -   'Ctrl   + 2' ; 
  5) обработчик события,  соответствующего выбору вставляемого пункта
   меню - MenuItemClick }
 Menultem  := AddIDEMenultem   ('Simple  Expert 2',   'ViewMyExpertItem2',
  'ViewWatchltem', '2', MenuItemClick); 
end;
 
destructor TEMyExpert.Destroy; 
begin
 Menultem.Free;
 inherited Destroy; 
end;
 
procedure ТЕMyExpert.MenuItemClick; 
begin
 { при выборе соответствующего эксперту пункта меню видаем сообщение,
  содержащее имя активного проекта } 
 MessageDlg('Current project name is ' + ToolServices.GetProjectName,
  mtlnformation, [mbOk], 0); 
end;
 
function TEMyExpert. GetName: string; 
begin
 { возвращаем имя эксперта } 
 Result := 'Mу Simple Expert 2'; 
end;
 
function TEMyExpert.GetStyle: TExpertStyle; 
begin
 { возвращаем стиль эксперта } 
 Result := esAddln; 
end;
 
function TEMyExpert. GetIDString: string; 
begin
 { возвращаем строку-идентификатор эксперта } 
 Result := 'Doomy.SimpleAddInExpert_2' 
end;
 
function AddIDEMenultem (const Caption, Name, PreviousItemName: string;
 const ShortCutKey: Char; OnClick: TIMenuClickEvent): TIMenuItemlntf; 
var MainMenu: TIMainMenuIntf;
 Menultems, PreviousItem, Parentltem: TIMenuItemlntf; 
begin
 { получаем интерфейс главного меню IDE } 
 MainMenu := ToolServices.GetMainMenu; 
 if Assigned (MainMenu) then 
 try
  { получаем интерфейс пунктов верхнего уровня меню }
  Menultems := MainMenu.GetMenultems; 
  if Assigned(Menultems) then 
  try
   { ищем пункт меню, перед которым необходимо вставить новый пункт }
   PreviousItem := MainMenu.FindMenultem(PreviousItemName); 
   if Assigned(PreviousItem) then 
   try
    { получаем интерфейс к родительскому пункту меню } 
    Parentltem := PreviousItem.GetParent; 
    if Assigned(Parentltem) then
    try
     { вставляем новый пункт меню и в качестве результата функции
      возвращаем его интерфейс } 
     Result := Parentltem.Insertltem
      (PreviousItem.Getlndex, Caption, Name, 
      '', ShortCut(Word(ShortCutKey), [ssCtrl]), 0, 0, 
      [mfVisible, mfEnabled], OnClick); 
    finally
     { освобождаем интерфейс родительского пункта меню }
     Parentltem.Free; 
    end; 
   finally
    { освобождаем интерфейс пункта меню, перед которым вставили
     новый пункт } 
     PreviousItem.Free; 
   end; 
  finally
   { освобождаем интерфейс пунктов верхнего уровня меню } 
   Menultems. Free; 
  end; 
 finally
  { освобождаем интерфейс главного меню IDE }
  MainMenu.Free; 
 end; 
end;
 
procedure Register; 
begin
 { регистрируем эксперт }
 RegisterLibraryExpert(TEMyExpert.Create); 
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
Популярные статьи
КомпьютерПресс использует