Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1161083354
tytus
2006-10-17 15:09
2006.11.05
Как рисовать на шапке разными цветами?


15-1160980134
IMHO
2006-10-16 10:28
2006.11.05
Какой ценой строились египетские пирамиды?


6-1150160343
anton773
2006-06-13 04:59
2006.11.05
большой размер файла


2-1161126729
Wolfheart
2006-10-18 03:12
2006.11.05
Assembler &amp; Delphi


1-1159275874
flaxe
2006-09-26 17:04
2006.11.05
"Перетаскивание" изображений





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский