Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как "отловить" печать отчёта / 8 сообщений из 8, страница 1 из 1
10.11.2009, 18:32
    #36302098
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "отловить" печать отчёта
Собственно вопрос: как (например, через тот же RL) узнать, что отчёт отправлен на печать? Неважно, на виртуальный или реальный принтер, неважно (хоть и желательно), сколько копий - но хоть сам факт посыла его на печать определить?
Смотрел OutputPage, но так и не дошло, возможно ли вообще (и если да, то как - не через nDeviceType случаем?) определить, посылает он страницу на превью или на принтер.
...
Рейтинг: 0 / 0
10.11.2009, 18:59
    #36302161
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "отловить" печать отчёта
tanglirСобственно вопрос: как (например, через тот же RL) узнать, что отчёт отправлен на печать? Неважно, на виртуальный или реальный принтер, неважно (хоть и желательно), сколько копий - но хоть сам факт посыла его на печать определить?
Смотрел OutputPage, но так и не дошло, возможно ли вообще (и если да, то как - не через nDeviceType случаем?) определить, посылает он страницу на превью или на принтер.
Самое простое, это запретить из Preview печатать!
Тогда у вас будет полный контроль над этим процессом.
С уважением, Алексей
...
Рейтинг: 0 / 0
11.11.2009, 13:05
    #36303642
igorbik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "отловить" печать отчёта
tanglir,

Сначала нужно убрать кнопку принтера из REPORT PREVIEW.
Как это сделать, смотри, например, здесь:
http://support.microsoft.com/kb/317466/

В программе сначала пишем
REPORT FORM PRINREPORT PREVIEW

Затем через MESSAGEBOX() или как еще, определяемся с выводом на печать.
Если да, то пишем
REPORT FORM PRINREPORT TO PRINTER PROMPT NOCONSOLE

Число копий задайте сами, и зациклите последнюю команду через FOR - ENDFOR

В коде вместо PRINREPORT ввести имя своего репорта
PROMPT использовать если принтеров много, и нужно его выбрать
...
Рейтинг: 0 / 0
11.11.2009, 13:35
    #36303764
igorbik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "отловить" печать отчёта
igorbik,

Здесь
http://www.tek-tips.com/viewthread.cfm?qid=1575325&page=1
и в ссылке внутри этой страницы есть еще несколько неплохих методов решения проблемы, в том числе и для 9-ки.
...
Рейтинг: 0 / 0
11.11.2009, 18:25
    #36304828
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "отловить" печать отчёта
igorbik,

Спасибо, буду смотреть.
...
Рейтинг: 0 / 0
12.11.2009, 09:57
    #36305869
asphalt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "отловить" печать отчёта
Все гораздо проще.
Вот кусок из рабочей проги.
Идея не моя, кто то подсказал.
Где то создаем функцию
Код: plaintext
1.
2.
3.
4.
5.
6.
FUNCTION ToRealPRINTER
IF WEXIST("Printing...") .OR. WEXIST("Ïå÷àòü...")
	m.lRlPrntQQ21 = .T.
ENDIF
RETURN .T. 
ENDFUNC

потом при печати делаем так
Код: plaintext
1.
2.
3.
4.
5.
m.lRlPrntQQ21 = .f.
REPORT FORM NameFormPrint PREVIEW WHILE TOrealPRINTER()
if m.lRlPrntQQ21
*значит печать была
endif 
Т.е. сначала выводится на просмотр, а потом определяется, была ли печать
...
Рейтинг: 0 / 0
14.11.2009, 18:55
    #36310744
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "отловить" печать отчёта
Прежде всего следует понять, что факт отправки отчета на печать вовсе не означает, что отчет будет распечатан. Может принтер не включен, может бумагу зажевало, может чернила (тонер) кончились... Да мало ли...

Другими словами, Вы всего-лишь отслеживаете только и исключительно факт отправки на печать, но не собственно печать.

Для отслеживания этого факта есть функция SYS(2040). Она введена в версии VFP8. Для ранних версий FoxPro следует опираться на тот факт, что при отправки отчета на печать обязательно появится окно "Printing...". Вот факт его появления и можно отловить, как показал asphalt . В версии VFP9 вывод этого окна может быть подавлен при печати отчета.

В обоих случаях, анализ SYS(2040) или появление окна "Printing..." необходимо отлавливать изнутри самого отчета. В его методах или выражениях. Поскольку анализ будет производится по окончании работы отчета, но надо озаботиться передачей полученного значения во вне отчета. Для этого можно использовать переменные с областью видимости Private

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Private plOutPut
plOutPut = .F.

REPORT FORM MyReport.frx

IF plOutPut = .T.
    * Отчет был отправлен на принтер
ENDIF

В самой первой (сверху в дизайнере отчета) полосе отчета дважды щелкаем мышкой по серой полосе обозначающей границу этой полосы и в окошке "On entry" пишем такой код

Код: plaintext
_VFP.SetVar("plOutPut",(SYS( 2040 )= 2 ))
...
Рейтинг: 0 / 0
14.11.2009, 22:29
    #36310937
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как "отловить" печать отчёта
ВладимирМ,

10x за детальный ответ!
PS. Половину из вышенаписанного я знал, только вот как применить, не дотумкал.
PPS. "факт отправки отчета на печать вовсе не означает, что отчет будет распечатан." Да меня, собственно, такие "тонкости" :) и не интересуют.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как "отловить" печать отчёта / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]