Недавно добавленные исходники

•  TDictionary Custom Sort  1 865

•  Fast Watermark Sources  1 891

•  3D Designer  3 320

•  Sik Screen Capture  2 306

•  Patch Maker  2 484

•  Айболит (remote control)  2 308

•  ListBox Drag & Drop  1 909

•  Доска для игры Реверси  69 824

•  Графические эффекты  2 507

•  Рисование по маске  2 037

•  Перетаскивание изображений  1 594

•  Canvas Drawing  1 596

•  Рисование Луны  1 611

•  Поворот изображения  1 232

•  Рисование стержней  1 277

•  Paint on Shape  914

•  Генератор кроссвордов  1 427

•  Головоломка Paletto  1 111

•  Теорема Монжа об окружностях  1 456

•  Пазл Numbrix  1 032

•  Заборы и коммивояжеры  1 305

•  Игра HIP  871

•  Игра Go (Го)  830

•  Симулятор лифта  969

•  Программа укладки плитки  807

•  Генератор лабиринта  969

•  Проверка числового ввода  870

•  HEX View  1 003

•  Физический маятник  873

•  Задача коммивояжера  925

 
скрыть


Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



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





Похожие по теме исходники

RSA шифрование через OpenSSL

GDI+ API

Snake & MiniSaper WinApi

Калькулятор на WinApi

 

Menu Icon WinApi

Octapion (шашки)

Error Vodes Win API

Посторонние окна WinAPI

 

Windows API (SendMessage)

API Hook




Copyright © 2004-2023 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте   Facebook   Ссылка на Twitter   Ссылка на Telegram