Определение параметров принтера через API

Previous  Top  Next

    
 

 

Для определения информации о принтере (плоттере, экране) необходимо знать 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 очень важны - они позволяют произвести пересчет координат из миллиметров в пиксели для текущего разрешения принтера. Пример таких функций:

 

Code:

{ Получить информацию о принтере }

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) - микроскопической.

 

©Drkb::03218

       

Взято с http://delphiworld.narod.ru