unit Connect;
interface
uses
ComObj, ActiveX, StdVcl, CryptoPlugin_TLB, AddInDesignerObjects_TLB, Office_TLB, Word_TLB, Dialogs;
type
TConnect = class(TAutoObject, _Connect, _IDTExtensibility2)
private
FWordApp: WordApplication;
FMenuBar: CommandBarControl;
protected
procedure OnAddInsUpdate(var custom: PSafeArray); safecall;
procedure OnBeginShutdown(var custom: PSafeArray); safecall;
procedure OnConnection(const Application: IDispatch;
ConnectMode: ext_ConnectMode; const AddInInst: IDispatch;
var custom: PSafeArray); safecall;
procedure OnDisconnection(RemoveMode: ext_DisconnectMode;
var custom: PSafeArray); safecall;
procedure OnStartupComplete(var custom: PSafeArray); safecall;
public
constructor Create;
end;
implementation
uses ComServ;
procedure TConnect.OnConnection(const Application: IDispatch;
ConnectMode: ext_ConnectMode; const AddInInst: IDispatch;
var custom: PSafeArray);
const
MENU_GUID = '';
var
MenuItem: CommandBarControl;
begin
FWordApp := Application as WordApplication;
FMenuBar := FWordApp.CommandBars.FindControl(msoControlPopup,1,MENU_GUID,true);
if FMenuBar = nil then
begin
FMenuBar := FWordApp.CommandBars.Item['Menu Bar'].Controls.Add(msoControlPopup,1,0,FWordApp.CommandBars.Item['Menu Bar'].Controls.Count,true);
FMenuBar.Caption := 'ITI &Crypto';
FMenuBar.Set_Tag(MENU_GUID);
FMenuBar.Visible := true;
end;
end;
procedure TConnect.OnStartupComplete(var custom: PSafeArray);
begin
end;
procedure TConnect.OnBeginShutdown(var custom: PSafeArray);
begin
end;
procedure TConnect.OnDisconnection(RemoveMode: ext_DisconnectMode;
var custom: PSafeArray);
begin
if FMenuBar <> nil then
FMenuBar.Delete(false);
end;
procedure TConnect.OnAddInsUpdate(var custom: PSafeArray);
begin
end;
constructor TConnect.Create;
begin
inherited;
FWordApp := nil;
FMenuBar := nil;
end;
initialization
TAutoObjectFactory.Create(ComServer, TConnect, Class_Connect,
ciMultiInstance, tmApartment);
end.
Создаю свой пункт меню.Но проблема в том,что оно не удаляется при закрытии документа.
И все это несмотря на то что я указал в качестве [I]Temporary [/I]значение [I]true [/I]в методе [I]Add[/I].
Вроде бы создаваться должно только на текущую сессию.Поэтому решил удалять в методе OnDisconnect.
Но когда я вручную в ворде,на вкладке [I]COM Add-Ins[/I] подключаю расширение,то все Ок.Пункт меню создается,а затем при РУЧНОМ отключении удаляется.Но когда я ставлю на автоматическое подключение расширения,выставив в реестре в [I]LoadBehavior [/I]значение 3([I]hex[/I]),то при закрытии ворда никакого удаления не происходит.В чем проблема??? :huh: