Главная страница
Случайная страница
КАТЕГОРИИ:
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
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
|