Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.11.05;
Скачать: CL | DM;

Вниз

Печать графики   Найти похожие ветки 

 
fog   (2006-10-18 20:18) [0]

ДВС. Имеется прога рисующая кривую (график) в канве на экране - его необходимо распечатать.
Вопрос - как правильно организовать вывод на принтер (по-возможности - без API) и, если через TPrinter, то куда и когда воткнуть отрисовку в канву принтера с учетом границ.
Можно без кода, только последовательность действий.


 
Shopot ©   (2006-10-18 21:00) [1]

Канва с графиком допустим называется - GraphCanvas. Тогда

Printer.Canvas.StretchDraw(Rect(0, 0, 100, 100), TGraphic(GraphCanvas));

И всё!!! Только вместо 100, 100 нужно поставить реальные числа.
Т.е. 100 - это число пикселей. Определяем текущее разрешение принтера
к примеру у нас вышло 300dpi (точек на дюйм бумаги или на 2,5 см по
нашему). Размер А4 примерно 21х29 см. Тогда чтобы отпечаток получился
на всю ширину страницы нужно: (21 см / 2,5 см) * 300 dpi = 2520.
(29 см / 2,5 см) * 300 dpi = 3480.

И получается
Printer.Canvas.StretchDraw(Rect(0, 0, 2520, 3480), TGraphic(GraphCanvas));

Но слева и сверху, а также справа и снизу можно отступить примерно по 150
точек для полей.
Printer.Canvas.StretchDraw(Rect(150, 150, 2520 - 150, 3480 - 150), TGraphic(GraphCanvas));


 
Virgo_Style ©   (2006-10-18 21:12) [2]

Дополню - dpi можно найти с помощью GetDeviceCaps(Printer.Handle, LogPixelsX) и
GetDeviceCaps(Printer.Handle, LogPixelsY) .

И лучше, imho, все считать в физических единицах для однообразного вида на всех принтерах.


 
fog   (2006-10-18 21:30) [3]

2 Shopot>
Спасибо, но это я уже читал у Пачеко (D4, гл. 10).
StretchDraw годится для картинки - у меня будут большие искажения, поэтому график перерисовывается в Printer.Canvas также как и выводится на экран с поправкой на разрешение.


 
Shopot ©   (2006-10-18 23:34) [4]

>fog

А из-за чего ты думаешь у тебя будут большие искажения?
И смысл первого твоего вопроса становится непонятным после
вот этого:
>и выводится на экран с поправкой на разрешение


 
fog   (2006-10-19 00:11) [5]

2 Shopot >
Уточняю.
Можно ли отрисовать график в канве принтера, а потом сделать следующее

Printer.BeginDoc;
Printer.Canvas.Refresh;
Printer.EndDoc;

или вместо Canvas.Refresh вставлять процедуру отрисовки?
Не могу проверить - нет принтера...


 
Barloggg   (2006-10-19 09:09) [6]


> Можно ли отрисовать график в канве принтера


можно.
и даже нужно.

просто растягивать картинку по размеры канвы - рискуем получить квадраты.

кстати разрешение принтера можно узнать напрямую у его канвы :)
Printer.Canvas.font.<не помню дальше>

лично я оперировал textheight для расстановки линий между строчками текста. т.е. конкретно делал полуторный интервал :)
никаких конкретных цифр. будет работать на любом принтере с любым разрешением.


 
fog   (2006-10-19 18:37) [7]

2 Barloggg>

Спасибо.
Вот еще бы учесть границы из PageSetupDialog в канве принтера и было бы замечательно?!


 
Virgo_Style ©   (2006-10-19 19:07) [8]

fog   (19.10.06 18:37) [7]
Вот еще бы учесть границы из PageSetupDialog в канве принтера и было бы замечательно?!


про соответствие пикселей и дюймов см. [2]



Страницы: 1 вся ветка

Текущий архив: 2006.11.05;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.056 c
1-1159163057
oleg__
2006-09-25 09:44
2006.11.05
Код нажатой клавиши


1-1159177313
Alex_C
2006-09-25 13:41
2006.11.05
Как сохранить цветовое выделение текста в TRichEdit?


11-1137864238
Boguslaw
2006-01-21 20:23
2006.11.05
KOL Unicode


3-1157410788
Strech
2006-09-05 02:59
2006.11.05
фильтр по датам в Access


15-1161097258
oldman
2006-10-17 19:00
2006.11.05
Что за новая система на сайте???