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

unit  exmpl_03;
 
{ ИСПОЛЬЗОВАНИЕ ADD-IN НОТИФИКАТОРОВ   }
 
interface
 
uses
Classes,  Dialogs,  Toollntf,  Exptlntf,  Menus;
 
type
TEMyExpert = class;
 
{ класс add - in нотификатора порождает от TIAddlnNotifier }
TAddInNotifier = class (TIAddlnNotifier)
private
 Expert:   TEMyExpert; 
public
 constructor  Create (anExpert:   TEMyExpert);
 procedure  FileNotification(NotifyCode:   TFileNotification; 
  const   FileName:   string;  var  Cancel:   Boolean);   override; 
end;
 
{ класс эксперта является потомком базового класса   TIExpert   }
TEMyExpert  = class (TIExpert)
private
 ProjectName: string; 
 Menultem: TIMenuItemlntf; 
 AddlnNotifier: TAddlnNotifier; 
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 AddIDEMenuItem   (const  Caption,  Name,   PreviousItemName:   string; 
 const   ShortCutKey:   Char;   OnClick:   TIMenuClickEvent):   TIMenuItemlntf;
 
implementation
 
constructor  TAddlnNotifier. Create; 
begin
 inherited  Create;
 Expert  :=   anExpert; 
end;
 
procedure TAddlnNotifier.FileNotification
 (NotifyCode:   TFileNotification;  const  FileName:   string; 
 var   Cancel:   Boolean); 
begin
 with Expert do
  case NotifyCode  of
   fnProjectOpened:      { открытие проекта   }
    ProjectName   :=   FileName; 
   fnProjectClosing:   { закрытие проекта   }
    ProjectName   :=   'unknown'; 
  end; 
end;
 
constructor  TEMyExpert.Create; 
begin
 inherited  Create;
 { добавляем пункт в   главное меню IDE Delphi   }
 Menultem  := AddIDEMenuItem   ('Simple  Expert 3',   'VieuMyExpertltem3',
  'ViewWatchltem',   '3',  MenuItemClick); 
 try
  { создаем add-in нотификатор  } 
  AddlnNotifier   := TAddlnNotifier.Create(Self); 
  { регистрируем add-in нотификатор  } 
  ToolServices.AddNotifier(AddlnNotifier); 
 except
  AddlnNotifier := nil; 
 end;
 { инициализируем пoлe, хранящее имя активного проекта } 
 ProjectName := ToolServices.GetProjectName; 
end;
 
destructor TEMyExpert.Destroy; 
begin
 Menultem.Free;
 if Assiqned(AddInNotifier) then
 begin
  { снимаем регистрацию add-in нотификатора }
  TooIServices.RemoveNotifier(AddlnNotifier);
  { уничтожаем add-in нотификатор }
  AddlnNotifier.Free; 
 end;
 inherited Destroy; 
end;
 
procedure TEMyExpert.MenuItemClick; 
begin
 { при выборе соответствующего эксперту пункта мены выдаем сообщение,
  содержащее имя активного проекта } 
 MessageDlg ('Current project name is ' + ProjectName, mtlnformation,
  [mbOk], 0); 
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
Популярные статьи
КомпьютерПресс использует