Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2012.04.22;
Скачать: [xml.tar.bz2];

Вниз

Как вывести окно 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.003 c
2-1324830541
Wanderer
2011-12-25 20:29
2012.04.22
Writefile, TList и динамические переменные


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


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


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


15-1324204018
oldman
2011-12-18 14:26
2012.04.22
Не хватает снега?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский