Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как распознать завершение работы серв. автом. WinWord?

8.2K
09 июля 2008 года
ReSearcher
19 / / 12.11.2005
Подскажите, пожалуйста.
 
Код:
Variant MSWordHolder= Variant::CreateObject( "Word.Application" );
MSWord.Exec( PropertySet("Visible" ) << true );

После чего пользователь переходит в WinWord и закрывает его.
Как об этом узнать по состоянию MSWordHolder?
По прежнему MSWordHolder.IsEmpty()==false
Поиск активных задач неприемлем - есть экземпляры WinWord зависимые от других приложений.
7.3K
10 июля 2008 года
H010d Freeze
143 / / 08.08.2006
На сколько я понимаю, ты хочешь дать GUI WinWord'а пользователю своей программы.
Если это так, то я бы заюзал TOleContainer и запускал WinWord в своем окне.
Код:
class TWordDocPreviewForm : public TForm
{
__published:    // IDE-managed Components
        TOleContainer *Doc;
...
};
void __fastcall TWordDocPreviewForm::FormShow(TObject *Sender)
{
    Doc->CreateObjectFromFile(StringToOleStr("MyFile.doc"),false);
    Doc->DoVerb(ovShow);
    ...
}
14
10 июля 2008 года
Phodopus
3.3K / / 19.06.2008
Цитата: ReSearcher
Как об этом узнать по состоянию MSWordHolder?



Неправильная постановка вопроса. Не по состоянию - надо подписаться на вордовские события, предоставив серверу автоматизации интерфейс для их получения

8.2K
10 июля 2008 года
ReSearcher
19 / / 12.11.2005
Спасибо.

Цитата: H010d Freeze
На сколько я понимаю, ты хочешь дать GUI WinWord'а пользователю своей программы.
Если это так, то я бы заюзал TOleContainer и запускал WinWord в своем окне.


Была такая мысль, но свой интерфейс несколько сложный, удобнее и понятнее заблокировать интерфейс модальным окном "Редактирование..." и переключиться в хорошо знакомый пользователю WinWord. А закрывать модальное окно когда WinWord снимет fmShareDenyWrite на редактируемый файл.

Цитата: Phodopus
Неправильная постановка вопроса. Не по состоянию - надо подписаться на вордовские события, предоставив серверу автоматизации интерфейс для их получения

Понятно, но WinWord'ов на целевой машине может быть 2000, XP, 2003, 2007, 20хх. Надо избежать импортирования и раннего связывания.
А без этого не обойтись для подписки на события. Поправьте, если я неправ.

Сейчас я просто обращаюсь к любому свойству сервера автом. и смотрю не было ли исключения.

Других вариантов наверное нет?

332
10 июля 2008 года
Valiant
416 / / 27.09.2004
Можете ещё попробовать поискать окна, процессы запущенные в системе.
246
10 июля 2008 года
GIZMO
1.8K / / 30.07.2004
Цитата: ReSearcher

Понятно, но WinWord'ов на целевой машине может быть 2000, XP, 2003, 2007, 20хх. Надо избежать импортирования и раннего связывания.


По идее идентификаторы св-в не должны круто меняться от версии к версии, я делал как-то плагин для 2000-го Ворда, потом он без проблем работал в 2003-м. Выяснить просто - подпишись на события и попробуй это на разных версиях Ворда. Ну в крайнем случае версию Ворда определить и действовать соответственно.

Цитата: ReSearcher

Других вариантов наверное нет?



Похоже нет.

8.2K
11 июля 2008 года
ReSearcher
19 / / 12.11.2005
ok, спасибо.
14
11 июля 2008 года
Phodopus
3.3K / / 19.06.2008
Цитата: ReSearcher
Поправьте, если я неправ



Хм, неправ. Ты получаешь интерфейс на тобой же запущенный экземпляр, и подписываешься на события этого экземпляра - другие экземпляры тебе по боку, какие бы версии он не имели

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог