Delphi - объектно-ориентированный язык программирования, разработанный компанией Borland в 1995 году. Он основан на языке программирования Pascal, но имеет более расширенные возможности и добавлены новые функции.
Delphi является интегрированной средой разработки (IDE), которая позволяет разрабатывать программное обеспечение для различных платформ, включая Windows, macOS, Android и iOS. Delphi достигает многоплатформенности с помощью...
Delphi имеет стандартный объект для доступа к принтеру - TPRINTER, находящийся в модуле PRINTERS. В этом модуле имеется переменная Printer:Tpinter, что избавляет от необходимости описывать свою. Он позволяет выводить данные на печать и управлять процессом печати. Правда, в некоторых версиях Delphi 1 он имеет "глюк" - не работают функции Draw и StrethDraw. Но эта проблема поправима - можно использовать функции API. Далее приведены основные поля и методы объекта Printers :
СВОЙСТВА
МЕТОДЫ
Пример:
procedure TForm1.Button1Click(Sender: TObject); begin with Printer do begin BeginDoc; { Начало печати } Canvas.Font:=label1.font; { Задали шрифт } Canvas.TextOut(100,100,'Это тест принтера !!!'); { Печатаем текст } EndDoc; { Конец печати } end; end;
Особенности работы с TPrinter
Определение параметров принтера через API
Для определения информации о принтере (плоттере, экране) необходимо знать Handle этого принтера, а его можно узнать объекта TPrinter - Printer.Handle.
Далее вызывается функция API (unit WinProcs):
GetDevice(Handle:HDC; Index:integer):integer;
Index - код параметра, который необходимо вернуть.
Для Index существует ряд констант :
Кроме перечисленных еще около сотни, они позволяют узнать о принтере практически все. Параметры, возвращаемые по 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) - микроскопической.
Я производил печать следующим образом:
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;