Главная страница
    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.037 c
15-1161159145
DevilDevil
2006-10-18 12:12
2006.11.05
Файл Ресурсов VS C++


2-1161589778
попович
2006-10-23 11:49
2006.11.05
Как перевести String в double?


15-1160647970
ПЛОВ
2006-10-12 14:12
2006.11.05
Жесткий диск с 2-мя интерфейсами...


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


11-1136123221
Аид
2006-01-01 16:47
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский