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

Автор: Mike Scott

Как лучше всего убедиться в том, что текст на странице расположен правильно вне зависимости от принтера, версии windows и т.п.?

Есть пара вызовов принтерных Escape-функций API, возвращающих физический размер страницы и отступ от края при печати (верх лево). Используя это, вы можете убедиться в том, печать начинается в одном и том же месте реального листа. Примечание: тем не менее, вы все еще зависите от точности принтера и драйвера, на практике это может вылиться в разброс 1-2 мм.

Для получения размера физической страницы и отступа от верхнего левого угла печатаемой области, используйте следующий код:


var
  PhysSize, PrintingOffset : TPoint ;
begin
  Escape( Printer.Handle, GetPhysPageSize, 0, NIL, @PhysSize ) ;
  Escape( Printer.Handle, GetPrintingOffset, 0, NIL, @PrintingOffset ) ;

PhysSize и PrintingOffset теперь устанавливаются в единицах устройства, т.е. в пикселях принтера. Для преобразования мм в единицы устройства используйте следующий код:


xDevUnits := MulDiv( XXXmm,
GetDeviceCaps( Printer.Handle, HORZRES ),
GetDeviceCaps( Printer.Handle, HORZSIZE ) ) ;
yDevUnits := MulDiv( YYYmm,
GetDeviceCaps( Printer.Handle, VERTRES ),
GetDeviceCaps( Printer.Handle, VERTSIZE ) ) ;

Затем, для примера, вы можете использовать эти координаты для вывода текста с помощью методов Printer.Canvas. Хорошая идея для этого метода - измерение единиц устройств, отступа и размера страниц для различных принтеров и сохранение полученной информации в базе данных. Также можно предусмотреть удобный для пользователя диалог, где он мог бы внести свои изменения и откорректировать точность своего принтера.

Проект Delphi World © Выпуск 2002 - 2004
Автор проекта: ___Nikolay