Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Form1.PrintForm






Запускаешь программу, нажимаешь эту созданную кнопку и у тебя на печать выходит Form1 со всеми элементами-объектами, видимыми на момент печати. Ты некоторое время смотришь на это безумие, потом перед командой PrintForm делаешь невидимыми кнопки и в надежде на чудо, снова повторяшь процесс, но чуда не произошло. Кнопок теперь нет, но распечатка красивше от этого не стала. И понося на чем свет VB, Microsoft и его хозяина, выключаешь все и идешь пить пиво.

Вот про печать и все.

Шучу. Во-первых на печать надо выводить именно то, что мы хотим, а не то, что можем, и в полном объеме. Во-вторых, расположение объектов на форме может быть красиво, но на листе дизайн должен быть совсем иной и объекты расположены по-другому, а форма для создания печатного документа вообще не годится.

А теперь скажу, что подготовка для печати красивой страницы - достаточно кропотливый процесс. То есть, надо программно расчитывать месторасположение всех элементов страницы, причем в зависимости от формата листа и размера шрифта и всего остального. Зато тщательно подготовленная страница выглядит, как настоящий документ, очень достойно.

Основной объект, с которым мы будем работать - Printer. Несмотря на то, что это объект, ни самого объекта в окне инструментов или на форме, ни свойств в окне свойств мы не увидим. Он невидим. Поэтому все надо делать программно. Но этот объект имеет очень много свойств и методов, большинство из которых нам нужны. Постараемся разобраться подробнее. Хочу заметить, что не все принтеры поддерживают все свойства объекта Printer. В этом случае разные свойства могут вызывать одинаковое действие, не вызвать никакого действия или же вообще привести к ошибке. Я использовал довольно-таки старый лазерный черно-белый принтер HP LaserJet 5L, и основываясь на его возможностях и готовил пример. Можно было взять цветной струйник, но струйники - дороги в эксплаутации и, как правило, документы печатаются на лазерных принтерах.
Итак, начнем со свойств, список важнейших из них приведен в таблице ниже:

Свойство Характеристика Синтаксис
.Copies определяет число печатаемых копий Printer.Copies=1 (одна копия)
.ColorMode определяет цветную или монохромную (оттенки серого) печать vbPRCMMonochrome=1 (черно-белая) vbPRCMColor =2 (цветная). Монохромные принтеры это свойство игнорируют. Printer.ColorMode=1 или Printer.ColorMode=vbPRCMMonochrome
.CurrentX и.CurrentY устанавливают горизонтальную (CurrentX) или вертикальную (CurrentY) координаты для начала (продолжения) печати. Определяется по-умолчанию в твипах, либо в текущих единицах измерения Printer.CurrentX=500 Printer.CurrentY=1000
.Duplex возвращает или устанавливает значение, которое определяет, будет ли страница печататься с двух сторон, константы: vbPRDPSimplex =1, vbPRDPHorizontal= 2, vbPRDPVertical=3. Printer.Duplex=1 (Одностороння печать с текущей ориентацией листа) Printer.Duplex=2 (Двухсторонняя печать горизонтальной страницы) Printer.Duplex=3 (Двухсторонняя печать вертикальной страницы)
.Font определяет " жирность" текста, подчеркивание, перечеркивание, курсив и т.п. Printer.Font.Bold = True (жирный) Printer.Font.Underline = True (подчеркивание)
.FontCount возвращает число доступных шрифтов Text1.Text=Printer.FontCount
.FontName возвращает или устанавливает имя шрифта Printer.FontName=" Arial" (устанавливает шрифт Arial)
.Fonts возвращает имена всех доступных шрифтов Dim I As Long For I = 0 To Printer.FontCount -1 List1.AddItem Printer.Fonts (I) Next I
.FontSize возвращает или устанавливает размер шрифта в пунктах (максимальное значение 2160). Задается после задания свойства FontName. При использовании шрифтов TrueType менее 8 пунктов, надо сначала задать свойство FontSize, затем FontName, а потом снова FontSize Printer.FontSize=18
.Height и.Width устанавливают физические размеры листа бумаги. Используются вместо установок PiperSize. Для Printer задается только в твипах. Printer.Height=5000 (Высота) Printer.Widtht=3000 (Ширина)
.Orientation возвращает или устанавливает значение, указывающее, в вертикальном или горизонтальном расположении печатаются документы. Принимает значение двух констант: vbPRORPortrait =1 (вертикаль), vbPRORLandscape=2 (горизонт) Printer.Orientation=1 или Printer.Orientation=vbPRORPortrait
.Page возвращает текущий номер страницы, начиная с единицы и шагом единица Printer.Print Printer.Page (вывод на печать текущей страницы)
.PaperBin возвращает или устанавливает значение, указывающее для принтера установленный по умолчанию лоток для подачи бумаги. Константы перечислены в библиотеке объектов Visual Basic (VB) в Object Browser. Printer.PaperBin=1 (верхний лоток) Printer.PaperBin=2 (нижний лоток) Printer.PaperBin=3 (средний лоток) Printer.PaperBin=4 (ручная подача) Printer.PaperBin=7 (лоток по умолчанию) и т.д.
.PaperSize возвращает или устанавливает значение, указывающее размер бумаги для текущего принтера. vbPRPSA4= 9 для листа A4, 210 x 297 мм vbPRPSUser=256 для пользовательского Константы перечислены в библиотеке объектов Visual Basic (VB) в Object Browser. Printer.PaperSize=9 или Printer.PaperSize=vbPRPSA4 (установка листа A4)
.PrintQuality возвращает или устанавливает значение, указывающее разрешающую способность принтера (отрицательная константа). Можно также задавать положительные значения в точках на дюйм (dpi). Printer.PrintQuality=-1 (черновой- draft) Printer.PrintQuality=-2 (низкая- Low) Printer.PrintQuality=-3 (средняя- Medium) Printer.PrintQuality=-4 (высокая- High) Printer.PrintQuality=300 (разрешение 300 dpi)
.Zoom возвращает или устанавливает процентное соотношение, по которому увеличивается или уменьшается масштаб вывода на печать. Число обозначает процент и по умолчанию равно 0, что соответствует стандартному размеру. Printer.Zoom=50 (лист с уменьшением 1: 2)

Теперь, как ни печально, надо переходить к методам, но их не так много. На мой взгляд важные приведены в таблице ниже:

Метод Характеристика Синтаксис
.EndDoc завершает формирование листа для печати и начинает печать Printer.EndDoc
.KillDoc немедленно завершает печать сформированной страницы Printer.KillDoc
.NewPage завершает текущую страницу на объекте Printer и переходит на следующую Printer.NewPage
.TextHeightи.TextWidth возвращают высоту (TextHeight) и длину (TextWidth) текстовой строки, которая получится при ее выводе на печать или на форму с использованием текущего шрифта. В возвращаемое значение включаются и интервалы. Text1.Text=Printer.TextHeight(" vbzero") Text2.Text=Printer.TextWidth(" vbzero")

Tеперь попробуем разобраться, как все это использовать на примере программки Printing. Чтобы у нас было, что выводить на печать, я набросал подобие программки, представляющую собой рабочее места продавца мобильных телефонов. Советую вам скачать ее вверху страницы, чтобы иметь перед глазами, а потом продолжать читать главу.
Создадим новый exe-проект. Первая ее часть представляет собой интерфейс для работы с базой мобильных телефонов: вывод на экран изображения и технических характеристик телефона, две кнопки навигации - вперед и назад и кнопка Печать. Изображение и теххарактеристики грузятся из файлов, имеющих имена 1.jpg и 1.txt, 2.jpg и 2.txt, и так далее, т.е., аналогично программке Tester, которую мы разбирали в Главе 8.

Итак стандартное начало:

Option Explicit
Option Base 1

Объявляем статический одномерный массив для двенадцати строк технических характеристик телефона:

Dim MassiveData(12) As String

Затем несколько необходимых переменных

Dim FileName As String 'для имени загружаемых файлов
Dim F As Long 'для номера свободного файла
Dim X As Long 'для переменной цикло For...Next
Dim QuantityFonts As Long 'для числа найденых шрифтов

Затем процедура загрузки формы. Здесь мы просто изначально устанавливаем имя загружаемого файла - " 1" (" 1.jpg" и " 1.txt") и переходим к созданной нами процедуре загрузки этих файлов DataLoading().

Private Sub Form_Load()
FileName = " 1"
DataLoading
End Sub






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.