ActiveX-компонент в Word'е
От: m-vic  
Дата: 27.09.05 18:23
Оценка:
Здравствуйте!
Пишу ActiveX-компонент для встраивания его в Word (и последующего его использования). Знаю COM-технологию (в частности разработка DLL'ек на базовом интерфейсе IUnknown и их использование), но писать OLE-объект для встраивания его в Word или Excel не приходилось. Здесь необходимо, как я понял, знать интерфейс IDispatch.
В общем, делаю так:
— File->New->ActiveX Library.
— File->New->Active Form.
— Создаю методы в TLB, потом код прописываю для них.
— Регистрирую и компилирую созданную библиотеку OCX. Как компонент ее пока не оформлял (DPK), чтоб он был на вкладке ActiveX в Delphi.
В Word этот объект можно добавить 2 способами:
1. Элемент управления->Элемент управления OCX->и из выбираешь из списка свой объект.
2. Программно:
WordApplication1.Visible:=true;
WordApplication1.Documents.Add(EmptyParam, EmptyParam,EmptyParam,EmptyParam);
ClassType:='My_Object.Grid';
WordApplication1.ActiveDocument.InlineShapes.AddOLEControl(ClassType,EmptyParam);
Все замечательно работает. Но...
Пока что возникли следующие проблемы:
1. Свойства (состояние) вставленного и измененного OLE-объекта не сохраняются. Просмотрев форумы, стало ясно, что сохранение не предусмотрено, его нужно прописать программно. Но конкретного решения данной проблемы не нашел. А это просто необходимо.
2. Как программно запретить (если это возможно, конечно): удаление и перемещение OLE-объекта в Word'е? Еще — в Word'е есть: Элемент управления -> Конструктор форм, как пользователю запретить переходить в режим конструктора объекта? Знаю только, как убрать панель "Элемент управления": WordApplication1.ActiveDocument.CommandBars['Control Toolbox'].Set_Visible(false);
3. Как можно обращаться в свойствам объекта, находящегося в Word, из клиентского приложения? Допустим, свойство Name есть по умолчанию, если я создаю OLE-объект (не важно программно или нет), то оно становится равным My_Object1, следующее — My_Object2 и т.д. Как его изменить его программно и как его считать? Еще: как вызывать методы объекта, находящегося в Word, из клиентского приложения?
Надеюсь на помощь, заранее спасибо!
P.S. Если решу проблемы, то обязательно сообщу об этом.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.