OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 26 Апрель, 2024 01:39

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
СообщениеДобавлено: Четверг, 26 Июнь, 2008 15:33 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
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 не для этого предназначена. А других способов установить отступы не нашёл. Может, кто сталкивался с таким?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 26 Июнь, 2008 21:07 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Иван Кузьмицкий писал(а):
... Выяснил, что на печать выводится только правая сторона документа. А левая часть обрезается. Ширина обрезаемой части задаётся комбинацией параметров w, l и r.

Видимо, SetPage не для этого предназначена. А других способов установить отступы не нашёл. Может, кто сталкивался с таким?


Нечто похожее было, когда ширина документа (=вьюшки) из-за ошибок округления не вписывалась между полями страницы, установленными в другом месте -- печатались лишние пустые страницы.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 27 Июнь, 2008 08:10 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
Вот да, очень похоже.

Будто документ не влезает на одну страницу, разбивается на две, а печать начинается с последней.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 27 Июнь, 2008 08:30 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Если 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 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
Точно, так и есть.

В 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 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
Задумался, почему пришлось сильно поломать голову. Наверное, из-за того, что плохо представляю себе концепцию прокрутки, особенно в аспекте печати.
И жаль, конечно, что ключевая процедура Documents.Print недокументирована. Я в неё тыкался полдня.

Кстати, вот ещё тут было обсуждение на похожую тему.

viewtopic.php?f=24&t=713&start=0&st=0&sk=t&sd=a&hilit=PageMsg


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 28 Июнь, 2008 11:47 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Иван Кузьмицкий писал(а):
... И жаль, конечно, что ключевая процедура Documents.Print недокументирована.

Они, видимо, не уверены, насколько там всё правильно в смысле дизайна, и не хотят связывать себе руки.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 04 Июль, 2008 09:42 

Зарегистрирован: Пятница, 29 Июнь, 2007 12:16
Сообщения: 98
Будте людями, сделайте нормальный модуль, который это будет делать сам, или подсистему, иначе опять каждый следующий должен все с нуля писать.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 04 Июль, 2008 10:02 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
О каком модуле-подсистеме идет речь? Всё уже сделано - в каркасе.

Просто документацию надо очень внимательно читать, да и то - она очень краткая, сразу можно не понять. Вот в этом проблема. При этом пониманию очень мешает инерция мышления - схемы не привычные.

Чтобы "каждый следующий" не ломал голову, стоит описать проблему-решение, хотя бы кратко, в вике.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 04 Июль, 2008 10:46 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
Программирование в каркасе ББ - "сборочное". В данном случае с печатью, написание модуля, который "делает всё сам", не имеет смысла.

Это же сборка конкретного "аппарата" из готовых конструкций общего назначения. И, конечно же, не хватает простых примеров, по которым можно понять принципы сборки.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 04 Июль, 2008 12:04 

Зарегистрирован: Пятница, 29 Июнь, 2007 12:16
Сообщения: 98
Я понимаю, что вопрос уже миллион раз поднят.

Если мне каждый раз надо писать стандартные бибилиотеки самому, то мне проще будет взять среду с менее красивым языком, в которой эти бибилиотеки уже есть.

Вы просто в большинстве своем подходите к ББ как к среде, предназначенной для обучения кого-то чему-то. Для меня это рабочий инструмент. Да, я оптимизирую соственно математическую часть алгоритма, но на выписывание и оптимизацию всяких прибамбасов типа отрисовки или печати на принтере у меня просто нет желания и времени.

Например сейчас, чтобы распечатать графики, которые мне выжает програма, мне надо их или принтскринить, или конвертировать в пдф и печатать оттуда. желания копаться в системных библиотеках нет никакого желания.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 04 Июль, 2008 12:14 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
Лично я подхожу к ББ, как к среде, позволяющей легко конструировать инструменты. Например, с помощью ББ я собрал "конструктор отчётов", позволяющий визуально сконструировать отчёт, подключить к любому источнику данных, сохранить отчёт в файл, вывести на принтер.

Вы говорите, что для распечатки графиков нужно их выводить в PDF? Зачем такие сложности, когда составной документ распечатывается напрямую?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB