Главная страница
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
3-1274956779
Николай2010
2010-05-27 14:39
2012.04.22
Access+Delphi+Ado - про транзакции


15-1324240202
Юрий
2011-12-19 00:30
2012.04.22
С днем рождения ! 19 декабря 2011 понедельник


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


6-1255153609
Leo50
2009-10-10 09:46
2012.04.22
Проблема с ScktSrvr.exe


2-1325099067
ghjtyu21
2011-12-28 23:04
2012.04.22
змейка