OberonCore https://forum.oberoncore.ru/ |
|
Распечатка отображения с произвольными отступами https://forum.oberoncore.ru/viewtopic.php?f=23&t=1047 |
Страница 1 из 1 |
Автор: | Иван Кузьмицкий [ Четверг, 26 Июнь, 2008 15:33 ] |
Заголовок сообщения: | Распечатка отображения с произвольными отступами |
BlackBox 1.5re026. Делаю вывод отображения на печать. Сначала попробовал так: Код: CONST mm = Ports.mm; VAR v: Views.View; BEGIN ... Printing.PrintView(v, Printing.NewPar(page, header, footer, copies)); ... Отображение прекрасно распечатывается, только отступы от краёв листа устанавливаются по 2 см, причём автоматически. Но отступы хочется устанавливать свои, а в документе вроде можно задавать область. Код: CONST mm = Ports.mm; wA4 = 210*mm; hA4 = 296*mm; lm = 10*mm; tm = 10*mm; rm = 10*mm; bm = 10*mm; VAR v: Views.View; d: Documents.Document; BEGIN ... d := Documents.dir.New(v, wA4, hA4); Documents.Print(d, Printers.dir.Current(), Printing.NewPar(page, header, footer, copies)); ... И тут начинаются странные вещи. Принтер захватывает лист и выплёвывает пустой, то есть ничего на листе нет. Я тогда вызвал d.SetPage(wA4, hA4, lm, tm, wA4-rm, hA4-bm, FALSE); Не помогло. Начал тогда экспериментировать с параметрами SetPage: w, h, l, t, r, b. Выяснил, что на печать выводится только правая сторона документа. А левая часть обрезается. Ширина обрезаемой части задаётся комбинацией параметров w, l и r. Видимо, SetPage не для этого предназначена. А других способов установить отступы не нашёл. Может, кто сталкивался с таким? |
Автор: | Info21 [ Четверг, 26 Июнь, 2008 21:07 ] |
Заголовок сообщения: | Re: Распечатка отображения с произвольными отступами |
Иван Кузьмицкий писал(а): ... Выяснил, что на печать выводится только правая сторона документа. А левая часть обрезается. Ширина обрезаемой части задаётся комбинацией параметров w, l и r. Видимо, SetPage не для этого предназначена. А других способов установить отступы не нашёл. Может, кто сталкивался с таким? Нечто похожее было, когда ширина документа (=вьюшки) из-за ошибок округления не вписывалась между полями страницы, установленными в другом месте -- печатались лишние пустые страницы. |
Автор: | Иван Кузьмицкий [ Пятница, 27 Июнь, 2008 08:10 ] |
Заголовок сообщения: | Re: Распечатка отображения с произвольными отступами |
Вот да, очень похоже. Будто документ не влезает на одну страницу, разбивается на две, а печать начинается с последней. |
Автор: | Евгений Темиргалеев [ Пятница, 27 Июнь, 2008 08:30 ] |
Заголовок сообщения: | Re: Распечатка отображения с произвольными отступами |
Если PageMsg не обрабатывается, отображение режется на куски, и кидается на печать. Поглядите в каком порядке идут куски: Код: PROCEDURE (v:... ) Restore (f: Views.Frame; l, t, r, b: INTEGER); Ещё момент - при печати делается копия отображения, чтобы прокрутка его не затрагивала.
BEGIN IF Views.IsPrinterFrame(f) THEN (* вывести l, t, r, b *) END; ... END; |
Автор: | Иван Кузьмицкий [ Пятница, 27 Июнь, 2008 09:12 ] |
Заголовок сообщения: | Re: Распечатка отображения с произвольными отступами |
Точно, так и есть. В Documents.Print распечатываемому документу посылается сообщение PageMsg. Сделал обработку в обработчике распечатываемого отображения: Код: PROCEDURE (v: View) HandleCtrlMsg* (f: Views.Frame; VAR msg: Controllers.Message; VAR focus: Views.View); BEGIN WITH msg: Controllers.PageMsg DO msg.done := TRUE ELSE focus := v.inner END END HandleCtrlMsg; И всё пошло, как по маслу! Спасибо! |
Автор: | Иван Кузьмицкий [ Пятница, 27 Июнь, 2008 09:41 ] |
Заголовок сообщения: | Re: Распечатка отображения с произвольными отступами |
Задумался, почему пришлось сильно поломать голову. Наверное, из-за того, что плохо представляю себе концепцию прокрутки, особенно в аспекте печати. И жаль, конечно, что ключевая процедура Documents.Print недокументирована. Я в неё тыкался полдня. Кстати, вот ещё тут было обсуждение на похожую тему. viewtopic.php?f=24&t=713&start=0&st=0&sk=t&sd=a&hilit=PageMsg |
Автор: | Info21 [ Суббота, 28 Июнь, 2008 11:47 ] |
Заголовок сообщения: | Re: Распечатка отображения с произвольными отступами |
Иван Кузьмицкий писал(а): ... И жаль, конечно, что ключевая процедура Documents.Print недокументирована. Они, видимо, не уверены, насколько там всё правильно в смысле дизайна, и не хотят связывать себе руки. |
Автор: | Darksnake [ Пятница, 04 Июль, 2008 09:42 ] |
Заголовок сообщения: | Re: Распечатка отображения с произвольными отступами |
Будте людями, сделайте нормальный модуль, который это будет делать сам, или подсистему, иначе опять каждый следующий должен все с нуля писать. |
Автор: | Евгений Темиргалеев [ Пятница, 04 Июль, 2008 10:02 ] |
Заголовок сообщения: | Re: Распечатка отображения с произвольными отступами |
О каком модуле-подсистеме идет речь? Всё уже сделано - в каркасе. Просто документацию надо очень внимательно читать, да и то - она очень краткая, сразу можно не понять. Вот в этом проблема. При этом пониманию очень мешает инерция мышления - схемы не привычные. Чтобы "каждый следующий" не ломал голову, стоит описать проблему-решение, хотя бы кратко, в вике. |
Автор: | Иван Кузьмицкий [ Пятница, 04 Июль, 2008 10:46 ] |
Заголовок сообщения: | Re: Распечатка отображения с произвольными отступами |
Программирование в каркасе ББ - "сборочное". В данном случае с печатью, написание модуля, который "делает всё сам", не имеет смысла. Это же сборка конкретного "аппарата" из готовых конструкций общего назначения. И, конечно же, не хватает простых примеров, по которым можно понять принципы сборки. |
Автор: | Darksnake [ Пятница, 04 Июль, 2008 12:04 ] |
Заголовок сообщения: | Re: Распечатка отображения с произвольными отступами |
Я понимаю, что вопрос уже миллион раз поднят. Если мне каждый раз надо писать стандартные бибилиотеки самому, то мне проще будет взять среду с менее красивым языком, в которой эти бибилиотеки уже есть. Вы просто в большинстве своем подходите к ББ как к среде, предназначенной для обучения кого-то чему-то. Для меня это рабочий инструмент. Да, я оптимизирую соственно математическую часть алгоритма, но на выписывание и оптимизацию всяких прибамбасов типа отрисовки или печати на принтере у меня просто нет желания и времени. Например сейчас, чтобы распечатать графики, которые мне выжает програма, мне надо их или принтскринить, или конвертировать в пдф и печатать оттуда. желания копаться в системных библиотеках нет никакого желания. |
Автор: | Иван Кузьмицкий [ Пятница, 04 Июль, 2008 12:14 ] |
Заголовок сообщения: | Re: Распечатка отображения с произвольными отступами |
Лично я подхожу к ББ, как к среде, позволяющей легко конструировать инструменты. Например, с помощью ББ я собрал "конструктор отчётов", позволяющий визуально сконструировать отчёт, подключить к любому источнику данных, сохранить отчёт в файл, вывести на принтер. Вы говорите, что для распечатки графиков нужно их выводить в PDF? Зачем такие сложности, когда составной документ распечатывается напрямую? |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |