Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Автоматическое закрытие Word после печати. [D6]


EternalWonderer ©   (2002-05-30 15:12:00) 

Задача:выдать документ на печать при помощи Word, после чего автоматически закрыть его.
Решение:
Procedure PrintClose(WordDoc: _Document);
Var EP: OleVariant;
Begin
EP := EmptyParam;
WordDoc.PrintOut(EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP);
WordDoc.Close(EP,EP,EP);
End;

Проблема:Всё работает замечательно, если Word не закрывается вместе с документом (т.е. если есть ещё открытые документы). В противном случае мы имеем малоприятное сообщение "Печать ещё не закончена. Закрытие Word приведёт ...". При помощи какого приёма можно заставить Word сначала допечатать документ, а потом уже закрыться?


EternalWonderer   (2002-05-30 17:19:00) [1]

Спасибо, посмотрю ...


vecs   (2002-05-30 17:18:00) [2]

ето и многое другое может халявный ARWordReport
http://shortway.to/vsoft


EternalWonderer   (2002-05-30 16:40:00) [3]

Отлично! Требуемая функциональность получена. Осталось немного "подрехтовать" (например, вынести запрос в отдельный поток, добавить контроль открытия других документов на момент окончания печати и т.д.). БОЛЬШОЕ спасибо, Алексей..

А вообще, мне кажется предпочтительней вариант с макросом, - вот только возиться некогда ...


AFROLOV   (2002-05-30 16:20:00) [4]

Цитата из справки по VBA:
BackgroundPrintingStatus Property

Returns the number of print jobs in the background printing queue. Read-only Long.

Ждем след образом:
While (WordDoc.Application.BackgroundPrintingStatus>0) do
begin
end;


EternalWonderer   (2002-05-30 16:01:00) [5]

ОК, можно попытаться дождаться. Только вот как "спросить" у Word, закончил он печать документа или ещё нет?

Может, возможен такой вариант: написать макрос на VB, "запихнуть" его в Word, и запускать после PrintOut вместо Close, чтобы он дожидался окончания печати и закрывал документ (и Word)?


AFROLOV   (2002-05-30 15:44:00) [6]

Тогда есть предложение дождаться окончания печати и после этого закрывать Word. Или закрыть все документы и после этого закрывать Word.


EternalWonderer   (2002-05-30 15:37:00) [7]

>AFROLOV © (30.05.02 15:26)
Маленькая поправочка:
WordDoc. Application.DisplayAlerts := wdAlertsNone;
Спасибо, но НЕ помогло.


AFROLOV   (2002-05-30 15:26:00) [8]

Const wdAlertsNone=0;
.....
.....
Procedure PrintClose(WordDoc: _Document);
Var EP: OleVariant;
Begin
EP := EmptyParam;
WordDoc.PrintOut(EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP,EP);
WordDoc.DisplayAlerts:=wdAlertsNone;
WordDoc.Close(EP,EP,EP);
End;


Наверх

Титульная страница Поиск, карта сайта Написать письмо