powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как "отловить" печать отчёта
8 сообщений из 8, страница 1 из 1
Как "отловить" печать отчёта
    #36302098
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно вопрос: как (например, через тот же RL) узнать, что отчёт отправлен на печать? Неважно, на виртуальный или реальный принтер, неважно (хоть и желательно), сколько копий - но хоть сам факт посыла его на печать определить?
Смотрел OutputPage, но так и не дошло, возможно ли вообще (и если да, то как - не через nDeviceType случаем?) определить, посылает он страницу на превью или на принтер.
...
Рейтинг: 0 / 0
Как "отловить" печать отчёта
    #36302161
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirСобственно вопрос: как (например, через тот же RL) узнать, что отчёт отправлен на печать? Неважно, на виртуальный или реальный принтер, неважно (хоть и желательно), сколько копий - но хоть сам факт посыла его на печать определить?
Смотрел OutputPage, но так и не дошло, возможно ли вообще (и если да, то как - не через nDeviceType случаем?) определить, посылает он страницу на превью или на принтер.
Самое простое, это запретить из Preview печатать!
Тогда у вас будет полный контроль над этим процессом.
С уважением, Алексей
...
Рейтинг: 0 / 0
Как "отловить" печать отчёта
    #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
Как "отловить" печать отчёта
    #36303764
igorbik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
igorbik,

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

Спасибо, буду смотреть.
...
Рейтинг: 0 / 0
Как "отловить" печать отчёта
    #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
Как "отловить" печать отчёта
    #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
Как "отловить" печать отчёта
    #36310937
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМ,

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


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