Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.04.22;
Скачать: CL | DM;

Вниз

Как вывести окно Word на передний план?   Найти похожие ветки 

 
И. Павел ©   (2011-12-29 13:03) [0]

Здравствуйте.

Я создаю документ Word на основе dot файла, используя ole (Word — 2007 но работать должно и в других версиях; версия Delphi — XE). Потом пытаюсь вывести приложение Word на передний план (app.Activate). При запуске в Delphi (т.е. вместе с отладчиком) работает, а при простом запуске exe — нет.
Вот код (кончено, между ActiveDocument и Visible := true есть код, но даже если его удалить, созданный пустой документ Word все равно не хочет выводиться на передний план)
 app := CreateOleObject("Word.Application");
 app.Documents.Add(ProgrDir+"\doc.dot").Activate;
 doc := app.ActiveDocument;
 app.Visible := True;
 app.Activate;


Подскажите, пожалуйста, как вывести сгенерированный документ Word на передний план?
PS: конечно, можно попытаться найти Handle окна Word и вывести его на передний план средствами WIN API. Но называет Word окно как вздумается и, вероятно, это может меняться от версии к версии Word.

Заранее спасибо.


 
Kilowatt ©   (2011-12-29 13:08) [1]

BringToFront?


 
И. Павел ©   (2011-12-29 13:16) [2]

> [1] Kilowatt ©   (29.12.11 13:08)
> BringToFront?

Уточните, пожалуйста, о каком BringToFront идет речь? VCL/API/COM или др.?


 
И. Павел ©   (2011-12-29 13:18) [3]

Нашел забавный способ :)
Но все же интересно, можно ли вывести окно Word на передний план без обходных путей.
app.WindowState := 2;
app.WindowState := 0;


 
Kilowatt ©   (2011-12-29 13:50) [4]

app.BringToFront?


 
И. Павел ©   (2011-12-29 14:09) [5]

> [4] Kilowatt ©   (29.12.11 13:50)
> app.BringToFront?

Оба варианта:
app.BringToFront;
app.BringToFront := True;
Приводят к ошибке: method not supported by automation object... Т.е. нет такого метода в OLE Word 2007...


 
Dimka Maslov ©   (2011-12-29 14:15) [6]

У WordApplication нет метода BringToFront. Кроме того, обычно BringToFront заставляет приложение моргать в панели задач. Следовательно, метод с WindowState - единственно возможный. Но для пущей правильности (чтоб отрабатывать случай максимизированного окна) надо сначала сохранить значение, присвоить двойку, а потом значение восстановить. Можно ещё выключить анимацию при сворачивании окон, чтобы не моргало.


 
И. Павел ©   (2011-12-29 16:35) [7]

> Можно ещё выключить анимацию при сворачивании окон, чтобы
> не моргало.

Я сделал так (решил максимизировать окно, т.к. после того, как пользователь нажал на кнопку печати, он скорее всего все равно будет работать именно с этим документом):
 app.WindowState := wdWindowStateMinimize;
 app.Visible := True;
 app.WindowState := wdWindowStateMaximize;



Страницы: 1 вся ветка

Текущий архив: 2012.04.22;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.006 c
2-1325071675
Plast
2011-12-28 15:27
2012.04.22
Програмно узнать все интерфейсы объекта.


2-1324724185
igorium
2011-12-24 14:56
2012.04.22
ShellTreeView - мультивыбор и рефреш


2-1324826113
Pcrepair
2011-12-25 19:15
2012.04.22
idHTTP1 и закачка стр. из ЯНДЕКС.ру


2-1325168892
Gu
2011-12-29 18:28
2012.04.22
Pointer


1-1291843738
alex870
2010-12-09 00:28
2012.04.22
TRegistry в службе