unit IdeNotifier; interface procedure Register; implementation uses SysUtils, TypInfo, ToolsApi; var NotifierIndex: Integer; type TIdeNotifier = class(TNotifierObject, IOTANotifier, IOTAIDENotifier) protected procedure AfterCompile(Succeeded: Boolean); procedure BeforeCompile(const Project: IOTAProject; var Cancel: Boolean); procedure FileNotification(NotifyCode: TOTAFileNotification; const FileName: string; var Cancel: Boolean); end; procedure Register; var Services: IOTAServices; begin Services := BorlandIDEServices as IOTAServices; Assert(Assigned(Services), 'IOTAServices not available'); NotifierIndex := Services.AddNotifier(TIdeNotifier.Create); end; procedure RemoveNotifier; var Services: IOTAServices; begin if NotifierIndex <> -1 then begin Services := BorlandIDEServices as IOTAServices; Assert(Assigned(Services), 'IOTAServices not available'); Services.RemoveNotifier(NotifierIndex); end; end; function MsgServices: IOTAMessageServices; begin Result := (BorlandIDEServices as IOTAMessageServices); Assert(Result <> nil, 'IOTAMessageServices not available'); end; procedure TIdeNotifier.AfterCompile(Succeeded: Boolean); begin MsgServices.AddTitleMessage('After Compile'); end; procedure TIdeNotifier.BeforeCompile(const Project: IOTAProject; var Cancel: Boolean); begin MsgServices.AddTitleMessage('Before Compile'); end; procedure TIdeNotifier.FileNotification(NotifyCode: TOTAFileNotification; const FileName: string; var Cancel: Boolean); begin MsgServices.AddTitleMessage(Format('%s: %s', [GetEnumName(TypeInfo(TOTAFIleNotification), Ord(NotifyCode)), FileName])); end; initialization finalization RemoveNotifier; end.