Оценка 0 Оценить ![]() ![]() ![]() ![]() ![]() ![]()
|
![]() |
Q. Вот я написал Add-in и он работает в Word 2000 и выше, а вот в Word 97 не хочет работать. Поддерживает ли Word 97 Add-ins? Если да то какая разница в реализации для Word 2000?
A. Дело в том, что Office97 вообще не поддерживает COM Add-Ins, в частности, в нем не реализован интерфейс IDTExtensibility2, который позволяет внешним программам встраиваться в приложения Office.
Ну не то, чтобы совсем не позволяет, просто COM Add-Ins не грузятся автоматически при запуске, то есть мы не можем использовать COM расширения напрямую. Но нам никто не мешает загрузить его вручную и передать ему объект Application! Некоторые офисные приложения поддерживают глобальные макросы AutoXXX, конкретно для Ворда - это AutoExec(), AutoNew(), AutoOpen(), AutoClose() и AutoExit(), которые вызываются автоматически. Если тебя интересует только Word, то объясняю что нужно делать:
1. Создай шаблон (*.dot)
2. Открой редактор VBA и создай следующие макросы
Dim o As Application
Dim obj AsObjectSub AutoExec()
Set obj = CreateObject("_ИМЯ_ТВОЕГО_ОБЪЕКТА_")
Set o = ThisDocument.Application
obj.Initialize o
EndSubSub AutoExit()
IfNot obj IsNothingThen
obj.UnInitialize
EndIfSet obj = NothingSet o = NothingEndSub |
3. Помести этот шаблон в папку Startup и проверь, чтобы было разрешено выполнение макросов.
4. Создай у себя в коде методы Initialize и UnInitialize, в который выполни необходимые действия. Например так:
STDMETHODIMP CWTWordAddin::Initialize(IDispatch *Application)
{
CComQIPtr<_Application> pApp(Application);
ATLASSERT(pApp);
if( pApp == NULL )
return S_FALSE;
// далее делай все как обычно
.....
}
|
P.S. В Office97 ты не сможешь поймать события от кнопок меню и тулбаров. Поэтому тебе придется организовавать обработку команд через макросы, но это уже тема отдельного вопроса. В общем при помощи вышеописанных действий (с отличиями в использовании автомакросов) мне удалось заставить заработать Add-in в Word97, Excel97, PowerPoint97. В Outlook97 и Access97 пока не получилось.
Оценка 0 Оценить ![]() ![]() ![]() ![]() ![]() ![]()
|