powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Печать отчёта из окна просмотра
5 сообщений из 5, страница 1 из 1
Печать отчёта из окна просмотра
    #33343103
WildBoar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VFP6. Задача: подавить кнопку печати из окна предварительного просмотра отчёта (это когда REPORT PREVIEW). Чтобы не смогли юзеры отчёты из просмотра печатать.

Предполагаю чего-нибудь замутить в Init() Data Environment репорта. Весь тулбар, например, погасить.

Есть другие мысли у кого? Может, кто уже побеждал такую проблему?
...
Рейтинг: 0 / 0
Печать отчёта из окна просмотра
    #33343775
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть 3 принципиальных способа решения:

Использовать файл ресурсов

Перехватить момент начала печати и прервать этот процесс

Дать распечатать в файл и удалить результат печати


Использовать файл ресурсов

Данное решение предполагает использование специально измененного ресурсного файла, в котором просто отсутствует кнопка с изображением принтера. Т.е. послать отчет на печать из окна предварительного просмотра становится невозможно.

Как создать нужный файл ресурсов?

Сначала создаете копию существующего файла ресурсов, выполнив следующий код:

Код: plaintext
1.
2.
3.
4.
5.
6.
SET RESOURCE OFF
SELECT  0 
USE (SYS( 2005 ))
COPY TO NoPrint.dbf
USE
SET RESOURCE ON

В результате у вас получится копия ресурсного файла в текущей директории с именем NoPrint.dbf

Теперь о том, как удалить кнопку с изображением принтера из соответсвующей ToolBar.

Для этого сначала необходимо установить в качестве текущего ресурсного файла вновь созданный файл

Код: plaintext
1.
2.
gcResource=SYS( 2005 )   && сохраняю путь к старому ресурсному файлу
SET RESOURCE TO NoPrint.dbf

Далее выбираете пункт главного меню View->ToolBars... Убедитесь, что стоит крестик в пункте "Print Preview" и нажмите кнопку "Customize..."
Теперь нажмите левой кнопкой мыши кнопку с изображеним принтера в ToolBar "Print Preview" и не отпуская перетащите ее за пределы этого ToolBar. Все, кнопка удалена из этого ToolBar и такое состояние сохранено в текущем файле ресурсов.

Теперь следует восстановить исходный файл ресурсов

Код: plaintext
SET RESOURCE TO (m.gcResource)

Следует заметить, что внутри файла ресурсов много самой разнообразной информации, которая собственно не нужна в данной задаче. Поэтому для экономи места все лишнее можно удалить. Для этого откройте новый файл ресурсов

Код: plaintext
USE NoPrint.dbf

И найдите в нем не удаленную запись со следующими значениями полей:

Код: plaintext
1.
2.
3.
TYPE="PREFW"
ID="TTOOLBAR"
NAME="Print Preview"

Все остальные записи можно смело удалять. Они никак не влияют на данный ToolBar.

В принципе, этот файл ресурсов (вместе с мемо-полем) можно включить внутрь проекта, чтобы не поставлять отдельно кучу ресурсных файлов.


Перехватить момент начала печати и прервать этот процесс

Данное решение выполнено с использованием дополнительной пользовательской программы.

Решение основано на том факте, что при отправке отчета на принтер всегда появляется стандартное окно "Printing..." (в русскоязычной Run-Time библиотеке, т.е. в готовом EXE, это окно имеет имя "Печать..."). В этом окне присутствует единственная кнопка "Cancel", нажатие на которую приводит к прерыванию отправки отчета на принтер.

Подавить выдачу этого окна невозможно

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
FUNCTION StopPrinting
IF WEXIST("Printing...")=.T. OR WEXIST("Печать...")=.T.
	IF WEXIST("Printing...")=.T. 
		ACTIVATE WINDOW "Printing..."
	ELSE
		ACTIVATE WINDOW "Печать..."
	ENDIF
	KEYBOARD '{SPACEBAR}' PLAIN CLEAR
	DOEVENTS
ENDIF
RETURN ""	&& для VFP - эта строка не обязательна
ENDFUNC

Вызов этой функции делается в разделе OnEntry первой полосы отчета (если есть в Title, если нет, в PageHeader)


Дать распечатать в файл и удалить результат печати

Данное решение не прерывает выполнение печати, а перенаправляет его с принтера в другой источник с последующем уничтожением результата такой печати.

В качестве цели выбирается либо файл, либо специальное системное устройство с именем NUL (именно так, с одим символом "L"). Правда, отправка на устройство NUL далеко не всегда срабатывает.

Код: plaintext
1.
2.
3.
4.
REPORT FORM MyReport.frx NOCONSOLE TO FILE tmpPrint.txt PREVIEW
IF FILE("tmpPrint.txt")=.T.
	delete file tmpPrint.txt
ENDIF
...
Рейтинг: 0 / 0
Печать отчёта из окна просмотра
    #33343866
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМЕсть 3 принципиальных способа решения:

Использовать файл ресурсов

Перехватить момент начала печати и прервать этот процесс

Дать распечатать в файл и удалить результат печати


Добавлю с разрешения ВладимирМ еще один метод от себя:
4. Перейти на VFP 9.0 и использовать методы (DoStatus, DoMessage) класса, созданного от базового класса ReportListener. Достаточно посмотреть, как это просто сделано в Foundation Classes->OutPut->Report Listeners -> Report Listeners FFC Baseclass
С уважением, Алексей.
...
Рейтинг: 0 / 0
Печать отчёта из окна просмотра
    #33344263
alex11100
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
перейти на 9
и подправить reportpreview.app
...
Рейтинг: 0 / 0
Печать отчёта из окна просмотра
    #33344391
WildBoar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответы. Применил способ с ресурсным файлом. То, что надо! Отлично работает.

Советы с переходом на VFP9 лишены практической ценности, поскольку данную задачу необходимо было решить именно в рамках VFP6.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Печать отчёта из окна просмотра
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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