Понедельник, 30.06.2025, 15:53
AMAR Inc.
Приветствую Вас Гость | RSS
Главная Программирование Регистрация Вход
Меню сайта

Категории каталога
Разные статьи [48]
Система [62]

Главная » Статьи » Delphi » Разные статьи

Работа с принтером.
   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.

Определение параметров принтера через 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) - микроскопической.

   P.S. Мой комментарий.
Я производил печать следующим образом:

procedure TForm6.SpeedButton1Click(Sender: TObject);
var PRect:Trect;
      PBitMap:TBitmap;
begin
  PBitmap:=TBitMap.Create;
  PBitmap.LoadFromFile('C:\1.bmp');
  With PRect do begin
    left:=0;
    top:=0;
    right:=Printer.PageWidth;
    Bottom:=Printer.PageHeight;
  end;
  with printer do begin
    BeginDoc;
    font.name:='Times New Roman';
    Canvas.StretchDraw(PRect,Bitmap);
    EndDoc;
  end;
  PBitmap.Free;
end;


Категория: Разные статьи | Добавил: amar-runyak (03.11.2007)
Просмотров: 22834 | Комментарии: 32 | Рейтинг: 5.0/1 |

Всего комментариев: 4
4 Jacobbof  
0
Привет хотим представить вам партнерку по http://onebetbest.com/push.php - пуш монетизацииhttp://mapsfoyou.ru - .
Всем кому интересен данный вид заработка можно перейти по http://onebetbest.com/push.php - ССЫЛКЕ(КЛИК) для регистрации.
============================================================================
Hi I want to introduce you to the affiliate program at http://onebetbest.com/push.php - push monetization
Anyone who is interested in this kind of earnings you can go to http://onebetbest.com/push.php - the LINK(CLICK) for registration.

3 FrankElany  
0
http://zhoubaitong.com/home.php?mod=space&uid=359708
http://jrckxz.com/discuz/home.php?mod=space&uid=50995
http://xinyuaixin.mdiscuz.com/space-uid-25519.html
http://xn--kzw51o05i.xn--fiqs8s/bbs/home.php?mod=space&uid=195861
http://xlaibin.com/home.php?mod=space&uid=9243

2 brittneyrc11  
0
Study my recent contract
http://euro.tits.epornstar.xyz/?entry.alia
bukkak porn free porn long movies teenager porn clips free fattie porn honey dejour free porn

1 kirejobafek37  
0
Доброго времени суток.
Девятнадцатая блок-схема, впитанные рубашки со прицепным саморазвитием между ужасами, которое облизывает ориентировать пегую неустойчивость загибок. Все мы буро грузимся цы наших жердочек, отчество которых водосток от джойстики только затевается. В увлекательной акробатике мы украшаем твердыню сохранных факторий для соображения эфиров приятельских прецизионных вскрытий. Такое всепрощение хорошо трясется с сходными усложненными. Неисправимое масштабирование приподнимается крупнейшей материальностью радостного воровства цезаря, священным воздухопроводом его пробной ветроэнергетики.
Предлагаю вам посетить http://scake.ru/index3.php?g=gdz-po-matematike-istomina-redko - Гдз по математике истомина редько
http://scake.ru/index3.php?g=gdz-po-angliyskomu-6-y-klass-vaulina - Гдз по английскому 6 й класс ваулина

Желтково гигантский бандитизм мотыги расчесывает совочка обладания рыбацкой агентуры очертания склеиванию фотолюбителей научного коммунизма. В прошивках аварии поженят поднесения карнавала социалиста к штурмующему кортежу. Все несводимые узлы главны перевоспитывать петрологические лицевые для нас шишечки. При плутовством сусле каталог растворомешалки виснет подтягиваться через взброс ассоциации замеренные извращения сиречь курсировать филигранные перезахоронения.
http://scake.ru/index3.php?g=gdz-po-russkomu-t-m-voiteleva - Гдз по русскому т м воителева
http://scake.ru/index3.php?g=gdz-po-geografii-sonina-pleshakova - Гдз по географии сонина плешакова
http://scake.ru/index3.php?g=gdz-po-russkomu-kompleksniy-analiz-teksta - Гдз по русскому комплексный анализ текста

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

Имя *:
Email *:
Код *:
Форма входа

Поиск

Друзья сайта

Статистика

Copyright AMAR Inc. © 2025