Главная страница
    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.042 c
2-1161530626
ПчелкаМайя
2006-10-22 19:23
2006.11.05
Статус окна.


2-1161090702
varlam87
2006-10-17 17:11
2006.11.05
Как считать (записать) значение бита?


15-1160968658
Slider007
2006-10-16 07:17
2006.11.05
С днем рождения ! 14 октября


15-1160676300
Loginov Dmitry
2006-10-12 22:05
2006.11.05
[Builder 6] Приведение объектных типов


15-1160335814
IMHO
2006-10-08 23:30
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский