| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: ActiveX/СОМ/CORBA > OleContainer ActiveX ms word |
| Автор: rith2 23.7.2009, 18:43 |
| Привет. Ситуация - ActiveX Library -> ActiveXForm -> на ней OleContainer -> в него загружается документ ms word -> Компонент регистрируется. Проблема - Если АктивХ компонент в пределах одного приложения вызывается >1 раза, то есть несколько экземпляров ms word в OleContainer'е , то у них блокируется панель инструментов, кроме документа ms word, который был открыт самым последним. Печатать можно, но панель с инструментами заблочена. Как я понял проблема эта распространенная и связана с тем, что документы ворда както криво вешаются на один и тотже процесс ms word... Пробовал создавать свой WordApplication и у него создавать WordDocument - не катит. В Королевстве Делфи было решение: "....У объекта TOleContainer имеется внутренняя переменная FDocView, указывающая на интерфейс IOleDocumentView и инициализирующаяся в начале активизации OleContainerа: ...В свою очередь, у интерфейса IOleDocumentView есть метод Show(fShow: BOOL): .....Для "оживления" заблокированных документов, достаточно вызвать этот метод с параметром "false". Добавляем процедуру (или функцию с возможностью обработки ошибок, кому как больше нравится) ShowView(fShow : boolean) в TOleContainer:" (с) Королевство Делфи Не прокатил метод. На японском форуме вроде на решение наткнулся, но там по нему какаято дискуссия идет... а японский я не знаю Помогите а? Бьюсь над проблемой этой а выхода не видно :((( |
| Автор: rith2 2.8.2009, 14:14 | ||
Пока занимался другими вопросами и сейчас снова вернулся к этой проблеме... вот так вот работает приложение:
По разному пробовал - остановился на следующем - создается файл, ему присваивается случайное имя. Сохраняется в "Мои документы", откуда загружается в ОлеКонтейнер. Весь проект сохранен как .ocx компонент, который загружается в стороннем приложении. Вызываем в этом стороннем приложении этот компонент - ворд грузится (создается процесс WinWord), все работает Вызываем еще раз в стороннем приложении этот компонент (создаетс еще один процесс) - панель инструментов у 1го открытого документа умирает, будто бы Enabled:= False. У только что открытого документа все работает... Хотя текст добавлять получается.... ничего уже не понимаю.. все работает в разных процессах, почему такие косяки с панелью инструментов???? |
| Автор: rith2 2.8.2009, 15:07 |
| и даже у них какбы не Enаbled:= False (имхо тогда иконки должны стать бесцветными), а будто бы фокус чтоли у панели получить не получается.... |
| Автор: Данкинг 2.8.2009, 16:38 |
| Т.е. через "createoleobject" тоже не получается? |
| Автор: rith2 2.8.2009, 20:46 | ||
Не получается... Единственно как получается это если приконнектить файл к контейнеру через OleContainer.CreateLinkToFile Но документ открывается тогда не в окне приложения а совсем в отдельном, что не подходит.... ваще мыслей нет как быть, вроде бы ощущение, что решение гдето близко, но где именно понять не могу |
| Автор: rith2 3.8.2009, 18:59 |
| Скачал тут компонент (вернее демку)... называется Ultra Office Control - осх компонент позволящий осуществлять загрузку приложений мс офис в свою программу - заметил, что при создании, например, нескольких копий документов у ворда - запускается лишь один вордовский процес... |