Delphi World - Определение параметров принтера через API
Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Определение параметров принтера через 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) - микроскопической.

Проект Delphi World © Выпуск 2002 - 2017
Автор проекта: Эксклюзивные курсы программирования