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.