Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Урезать ClipRect канвы принтера [D6, Win95/98]


danja ©   (2003-04-21 10:47:00) 

Не срабатывает Printer.Canvas.SetClipRect (Printer из QPrinters), точнее Printer.Canvas.ClipRect после этого возвращает новые значения, но рисование происходит и за пределами установленного прямоугольника. К сожалению не могу проверить на разных принтерах, у меня только лазерники HP: 6L, 6P и 2200. Если кто знает, подскажите, пожалуйста, решение или обходной путь. PS Программно не выводить графику в область полей я не могу - очень громоздкий и медленный пересчет.


danja   (2003-04-23 09:13:00) [1]

Спасибо огромное всем за проявленый интерес. Для Proton:
Printer.Canvas.Handle - это и есть hdc, но только в модуле Printers, а в QPrinters он QPaintDeviceH.
Для REA: действительно я сам пока не замечал вранья в основных характеристиках, другое дело что иногда размеры листа бумаги трактуются как полный лист, иногда с учетом внутренних полей принтера и т.д.
В любом случае все получилось с SelectClipRgn (еще один поклон MBo).


Proton   (2003-04-22 16:33:00) [2]

> Printer.Canvas.SetClipRect

> HDC(QPrinters.Printer.Handle) не срабатывает.

Printer.Canvas.Handle - это и есть hdc
или я недопонял?


REA   (2003-04-22 11:49:00) [3]

Ну может они не все характеристи врут, а только то что относится к RASTERCAPS, а может и у меня руки кривые.


danja   (2003-04-22 10:54:00) [4]

Спасибо, попробую еще раз. Насчет Q сам не совсем в курсе. Вроде как семейство новых модулей (Delphi and Kylix Cross-Platform Visual Component Library), где предоставлено больше возможности по сравнению с предыдущими. Но за неделю работы уже выловил множество глюков. Не знаю на что и грешить, то ли моя D6, то ли Win98, то ли вся связка в купе с железом. Но если GetDeviceCaps врет - даже и не знаю как вывести сложную (векторную) графику (проще говоря, карту) в заданную часть листа с хорошим разрешением и жестко заданным масштабом.


REA   (2003-04-22 10:01:00) [5]

Насчет Q не в курсе, а так SelectClipRgn и ExtSelectClipRgn рабтают везде где видел. А вот о свойствах (DeviceCaps кажется) принтеры часто врут.


danja   (2003-04-22 09:00:00) [6]

Спасибо, MBo. К сожалению не знаю как преобразовать QPrinters.Printer.Handle (QPaintDeviceH) или QPrinters.Printer.Canvas.Handle (QPainterH) в HDC - прямое :
HDC(QPrinters.Printer.Handle) не срабатывает. Попробовал Printer из Printers у которого Хендл нужного типа, все равно не получилось. Видимо проблема глубже. Попробую подрезать вывод графики или наложить сверху поля.


MBo   (2003-04-21 10:51:00) [7]

попробуй SelectClipRgn или selectClipPath
на 6L работало.


Наверх

Титульная страница Поиск, карта сайта Написать письмо