Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:
реклама
pechatik.ru

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

FAQ - Работа с принтером.

DELPHI имеет стандартный объект для доступа к принтеру - TPRINTER, находящийся в модуле PRINTERS. В этом модуле имеется переменная PRINTER:TPINTER, что избавляет от необходимости описывать свою. Он позволяет выводить данные на печать и управлять процессом печати. Правда, в некоторых версиях DELPHI 1 он имеет "глюк" - не работают функции DRAW и STRETHDRAW. Но эта проблема поправима - можно использовать функции API. Далее приведены основные поля и методы объекта PRINTERS:

PROPERTY

  • ABORTED:BOOLEAN - Показывает, что процесс печати прерван
  • CANVAS:TCANVAS - Стандартный CANVAS, как у любого графического объекта. Он позволяет рисовать на листе бумаге графику, выводить текст ... . Тут есть несколько особенностей, они описаны после описания объекта.
  • FONTS:TSTRINGS - Возвращает список шрифтов, поддерживаемых принтером
  • HANDLE:HDS - Получить HANDLE на принтер для использования функций API (см. Далее)
  • ORIENTATION:TPRINTERORIENTATION - Ориентация листа при печати : (POPORTRAIT, POLANDSCAPE)
  • PAGEHEIGHT:INTEGER - Высота листа в пикселах
  • PAGENUMBER:INTEGER - Номер страницы, увеличивается на 1 при каждом NEWPAGE
  • PAGEWIDTH:INTEGER - Ширина листа в пикселах
  • PRINTERINDEX:INTEGER - Номер используемого принтера по списку доступных принтеров PRINTERS
  • PRINTERS:TSTRINGS - Список доступных принтеров
  • PRINTING:BOOLEAN - Флаг, показывающий, что сейчас идет процесс печати
  • TITLE:STRING - Имя документа или приложения. Под этим именем задание на печать регистрируется в диспетчере печати

METODS

  • ASSIGNPRN(F:TEXTFILE) - Связать текстовый файл с принтером. Далее вывод информации в этот файл приводит к ее печати. Удобно в простейших случаях.
  • ABORT - Сбросить печать
  • BEGINDOC - Начать печать
  • NEWPAGE - Начать новую страницу
  • ENDDOC - Завершить печать.

Пример :

PROCEDURE TFORM1.BUTTON1CLICK(SENDER: TOBJECT);
BEGIN
 WITH PRINTER DO BEGIN
  BEGINDOC; { Начало печати }
  CANVAS.FONT:=LABEL1.FONT; { Задали шрифт }
  CANVAS.TEXTOUT(100,100,'Это тест принтера !!!'); { Печатаем текст }
  ENDDOC; { Конец печати }
 END;
END;

Особенности работы с TPRINTER

  1. После команды BEGINDOC шрифт у CANVAS принтера сбрасывается и его необходимо задавать заново
  2. Все координаты даны в пикселах, а для нормальной работы необходимы миллиметры (по двум очевидным причинам: очень трудно произвести разметку страницы в пикселах (особенно если необходима точность), и , главное, при изменении разрешающей способности принтера будет изменяться число точек на дюйм, и все координаты "поедут".
  3. У TPRINTER информация о принтере, по видимому, определяются один раз - в момент запуска программы (или смены принтера). Поэтому изменение настроек принтера в процессе работы программы может привести к некорректной работе, например, неправильной печать шрифтов TRUE TYPE.
  4. Определение параметров принтера через API - Для определения информации о принтере (плоттере, экране) необходимо знать HANDLE этого принтера, а его можно узнать объекта TPRINTER - PRINTER.HANDLE. Далее вызывается функция API (UNIT WINPROCS) : GETDEVICE(HANDLE:HDC; INDEX:INTEGER):INTEGER;
    • INDEX - код параметра, который необходимо вернуть. Для INDEX существует ряд констант :
      • DRIVERVERSION - вернуть версию драйвера
      • TEXNOLOGY - Технология вывода, их много, основные
      • DT_PLOTTER - плоттер
      • DT_RASPRINTER - растровый принтер
      • DT_DISPLAY - дисплей
      • HORZSIZE - Горизонтальный размер листа (в мм)
      • VERTSIZE - Вертикальный размер листа (в мм)
      • HORZRES - Горизонтальный размер листа (в пикселах)
      • VERTRES - Вертикальный размер листа (в пикселах)
      • LOGPIXELX - Разрешение по оси Х в DPI (пиксел /дюйм)
      • LOGPIXELY - Разрешение по оси Y в DPI (пиксел /дюйм)

    Кроме перечисленных еще около сотни, они позволяют узнать о принтере практически все.

    Параметры, возвращаемые по LOGPIXELX и LOGPIXELY очень важны - они позволяют произвести пересчет координат из миллиметров в пиксели для текущего разрешения принтера. Пример таких функций:

    PROCEDURE TFORM1.GETPRINTERINFO; { Получить информацию о принтере }
    BEGIN
      PIXELSX:=GETDEVICECAPS(PRINTER.HANDLE,LOGPIXELSX);
      PIXELSY:=GETDEVICECAPS(PRINTER.HANDLE,LOGPIXELSY);
    END;
    
    { переводит координаты из мм в пиксели }
    FUNCTION TFORM1.PRINTERCOORDX(X:INTEGER):INTEGER; 
    BEGIN
     PRINTERCOORDX:=ROUND(PIXELSX/25.4*X);
    END;
    
    { переводит координаты из мм в пиксели }
    FUNCTION TFORM1.PRINTERCOORDY(Y:INTEGER):INTEGER; 
    BEGIN
     PRINTERCOORDY:=ROUND(PIXELSY/25.4*Y);
    END;
    ---------------------------------
    GETPRINTERINFO;
    PRINTER.CANVAS.TEXTOUT(PRINTERCOORDX(30), PRINTERCOORDY(55),
     'Этот текст печатается с отступом 30 мм от левого края и '+
     '55 мм от верха при любом разрешении принтера');
    

    Данную методику можно с успехом применять для печати картинок - зная размер картинки можно пересчитать ее размеры в пикселах для текущего разрешения принтера, масштабировать, и затем уже распечатать. Иначе на матричном принтере (180 DPI) картинка будет огромной, а на качественном струйнике (720 DPI) - микроскопической.

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог