Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Встраивание MS Word в окно своего приложения, как? 
:(
    Опции темы
NightWishMaster
Дата 20.6.2008, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 14.4.2006

Репутация: нет
Всего: нет



Доброе время суток!
Когда то давно помню читал где-то, как можно встроить приложение Word в свое приложение таким образом, чтобы Word открывался не отдельным окном-приложением, а загружался бы в заданном объекте (только какой это объект?) своего приложения. Но сейчас уже все забыл smile Кто-нибудь с таким сталкивался? Как можно сделать так, чтобы Word открылся именно в заданной области моего приложения? Управление им (запуск сервера, открытие документов и т.п.) - не вопрос.
Заранее благодарен за советы.
PM MAIL   Вверх
xvr
Дата 23.6.2008, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Цитата(NightWishMaster @ 20.6.2008,  19:58)
Доброе время суток!
Когда то давно помню читал где-то, как можно встроить приложение Word в свое приложение таким образом, чтобы Word открывался не отдельным окном-приложением, а загружался бы в заданном объекте (только какой это объект?) своего приложения. Но сейчас уже все забыл smile Кто-нибудь с таким сталкивался? Как можно сделать так, чтобы Word открылся именно в заданной области моего приложения? Управление им (запуск сервера, открытие документов и т.п.) - не вопрос.
Заранее благодарен за советы.

Word может быть загружен как ActiveX control. Соотвественно твое приложение должно быть ActiveX контейнером.
PM MAIL   Вверх
NightWishMaster
Дата 26.6.2008, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 14.4.2006

Репутация: нет
Всего: нет



Цитата

Word может быть загружен как ActiveX control. Соотвественно твое приложение должно быть ActiveX контейнером

А поподробнее можно?  smile 
PM MAIL   Вверх
xvr
Дата 26.6.2008, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Цитата(NightWishMaster @ 26.6.2008,  19:21)
Цитата

Word может быть загружен как ActiveX control. Соотвественно твое приложение должно быть ActiveX контейнером

А поподробнее можно?  smile

Поподробнее будет книга, страниц так на 1000  smile Смотри в MSDN статью Introduction to ActiveX Controls (раздел Using the Container's Functionality), так же можно посмотреть исходники ATL классов CAxHostWindow (файл atlhost.h) и CAxWindow (файл atlwin.h) - они как раз и реализуют ActiveX container
Вот, нашел еще статью: Notes on Implementing an OLE Control Container


Это сообщение отредактировал(а) xvr - 26.6.2008, 20:48
PM MAIL   Вверх
NightWishMaster
Дата 21.7.2008, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 14.4.2006

Репутация: нет
Всего: нет



OLEContainer’ом пока не доволен по следующим причинам:
1) меню Ворда интегрируется в меню приложения. Я хотел бы, чтобы меню Ворда оставалось «при нем» и не создавало лишний «ажиотаж» в меню приложения 
2) при щелчке мышью на другом компоненте не могу вернуть фокус назад в Ворд;
3) не знаю, как получить указатель на созданный в ОЛЕ контейнере ворд, чтобы управлять им (например, создать там какой-либо текст).
Я создал простенький проект, на котором можно при желании ознакомиться с объектом моего недовольства  Есть главная форма MainForm, в которой можно создавать дочерние формы ChildForm с ОЛЕ контейнером. В конструкторе дочерней формы в ОЛЕ контейнер загружается Ворд. В главной форме есть меню, в которое сразу «залазит» непрошенное меню Ворда  При нажатии на Button1 в дочерней форме вернуть фокус клацаньем на Ворд мне не удается. Так же не знаю, как получить указатель на Ворд в конкретном дочернем окне.

Кто-нибудь знает, как бороться с такими «недостатками»?
Или может быть есть какой-нибудь другой, более продвинутый способ интеграции Ворда? В таком случае буду благодарен за пример.


Присоединённый файл ( Кол-во скачиваний: 28 )
Присоединённый файл  Project2.ZIP 111,23 Kb
PM MAIL   Вверх
xvr
Дата 22.7.2008, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Цитата(NightWishMaster @ 21.7.2008,  18:45)
OLEContainer’ом пока не доволен по следующим причинам:
1) меню Ворда интегрируется в меню приложения. Я хотел бы, чтобы меню Ворда оставалось «при нем» и не создавало лишний «ажиотаж» в меню приложения 

Это фича OLE2. Как отключить не помню - надо изучать MSDN
Цитата

2) при щелчке мышью на другом компоненте не могу вернуть фокус назад в Ворд;
А мышью обратно не возвращается? А TabStop у TOleContainer стоит в true?
Цитата

3) не знаю, как получить указатель на созданный в ОЛЕ контейнере ворд, чтобы управлять им (например, создать там какой-либо текст).
Проперть TOleContainer::OleObjectInterface
Цитата

Или может быть есть какой-нибудь другой, более продвинутый способ интеграции Ворда? В таком случае буду благодарен за пример.
На закладке Office2K есть компонент Word'а



Это сообщение отредактировал(а) xvr - 22.7.2008, 11:06
PM MAIL   Вверх
NightWishMaster
Дата 22.7.2008, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 14.4.2006

Репутация: нет
Всего: нет



Цитата(xvr @  22.7.2008,  11:06 Найти цитируемый пост)
А мышью обратно не возвращается? А TabStop у TOleContainer стоит в true?

Мышью назад не возвращается,  TabStop у TOleContainer стоит в true. После потери фокуса Ворд становиться неактивным и потом сколько я в него не тыкаю, фокус назад не возвращается. Единственный вариант - расширить ОЛЕ контейнер и ткнуть не на ворд, а непосредственно на сам контейнер - тогда фокус возвращается. Тыканье же на ворд не удается отследить ни в каком обработчике :-\ Можно в этом при желании убедиться в прикрепленном мной тренировочном проекте (C++ Builder 6).

Цитата(xvr @  22.7.2008,  11:06 Найти цитируемый пост)
Проперть TOleContainer::OleObjectInterface

Спасибо, как получить указатель уже разобрался.

Цитата(xvr @  22.7.2008,  11:06 Найти цитируемый пост)
На закладке Office2K есть компонент Word'а

На сколько я знаю, они позволяют запускать и работать с Вордом как с отдельным приложением, а не встраивать его в свою прогу. Или я ошибаюсь?

Я вот тут подумал - может мне Оле Контейнер и не нужен то вовсе. ОЛЕ это что? Внедрение и связывание. А мне то ничего такого и не надо ведь - ничего внедрять и тем более связывать. Все что мне надо - это открыть в заданной панельке формы окно МС Ворда, которое должно себя вести один в один, как и обычный ворд, просто быть развернутым в пределах другого окна, а не быть отдельным окном. На сколько понимаю, это не то внедрение, в каком его обычно понимают (когда отдельный объект одного приложения содержится в объекте другого приложения). Может можна как-нить присвоить запущеному Ворду родительское окно через SetParent, развернув его там по максимуму? Или может быть можно как нибудь задать дескриптор окна для Ворда? Чтобы указать, что его окно - это окно соответсвтующей панельки?
Надеюсь, я тут не слишком много нафантазировал? smile
PM MAIL   Вверх
xvr
Дата 23.7.2008, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 8
Всего: 223



Цитата(NightWishMaster @ 22.7.2008,  14:23)
Цитата(xvr @  22.7.2008,  11:06 Найти цитируемый пост)
На закладке Office2K есть компонент Word'а

На сколько я знаю, они позволяют запускать и работать с Вордом как с отдельным приложением, а не встраивать его в свою прогу. Или я ошибаюсь?

Там несколько вариантов, один из них (WordDocument) именн то, что нужно

Цитата

Я вот тут подумал - может мне Оле Контейнер и не нужен то вовсе. ОЛЕ это что? Внедрение и связывание. А мне то ничего такого и не надо ведь - ничего внедрять и тем более связывать. Все что мне надо - это открыть в заданной панельке формы окно МС Ворда, которое должно себя вести один в один, как и обычный ворд, просто быть развернутым в пределах другого окна, а не быть отдельным окном. 
Попребирай word'ы с закладки Office2K (IMHO тебе нужен WordApplication)


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: COM/DCOM/ActiveX/ATL/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.0827 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.