Форум: "Начинающим";
Текущий архив: 2006.11.05;
Скачать: [xml.tar.bz2];
ВнизПечать графики Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.045 c