Сообщений 0 Оценка 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 Оценка 0 Оценить |