Встраивание MS Word в окно своего приложения

Тема в разделе "WASM.WIN32", создана пользователем WishMaster, 20 июн 2008.

  1. WishMaster

    WishMaster New Member

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

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

    WishMaster New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2006
    Сообщения:
    54
    Адрес:
    Ukraine
    Я вот тут подумал - может мне Оле Контейнер и не нужен то вовсе. ОЛЕ это что? Внедрение и связывание. А мне то ничего такого и не надо ведь - ничего внедрять и тем более связывать. Все что мне надо - это открыть в заданной панельке формы окно МС Ворда, которое должно себя вести один в один, как и обычный ворд, просто быть развернутым в пределах другого окна, а не быть отдельным окном. На сколько понимаю, это не то внедрение, в каком его обычно понимают (когда отдельный объект одного приложения содержится в объекте другого приложения). Хочу попробовать предложенный kero способ установки Ворду SetParent. Только подскажите, плиз, как это сделать, если я создаю Ворд так:
    Variant WordServ = Variant::CreateObject("Word.Application");
    Или может быть можно как нибудь задать дескриптор окна для Ворда? Чтобы указать, что его окно - это окно соответсвтующей панельки?
    Надеюсь, я тут не слишком много нафантазировал? :)
     
  3. WishMaster

    WishMaster New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2006
    Сообщения:
    54
    Адрес:
    Ukraine
    Может кто подскажет, как получить хендл окна ворда, созданного так:
    Variant WordServ = Variant::CreateObject("Word.Application");
     
  4. WishMaster

    WishMaster New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2006
    Сообщения:
    54
    Адрес:
    Ukraine
    Этот вопрос снят - даем ворду специфическую шапку и дальше FindWindow. Теперь вот ломаю голову, как можно определить HWND дочерней формы моего приложения, а еще лучше - HWND панельки на этой форме :-/
     
  5. Valentin

    Valentin Member

    Публикаций:
    0
    Регистрация:
    2 ноя 2007
    Сообщения:
    128
    Не знаю, как отреагируют спецы, но доступ к СОМ я не осуществляю из АСМ-а ч-з известные технологии (смысла не вижу).
    1. Пишу в дате текст скрипта:
    Set w = CreateObject("Word.Application")
    w.Documents.Add
    w.Visible = True
    2. Записываю текст в файл с расширением VBS.
    3. Запускаю скрипт. (ВОРД появляется в своей красе с доступом ко всем его ф-циям...)
    4. Удаляю файл.

    Все это занимает несколько строчек кода на АСМе.