Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Печать из программы


Автор: Bisy 26.6.2006, 07:48
Сталкнулся с проблемой, как напечатать документ из программы. делает это объект Printer

Код

Sub Printers()
      Printer.Print txtTEXT.Text
      Printer.EndDoc


Печатает почти как надо, однако обзац печатает в строчку (независимо от его длинны), как напечатать обзац на нескольких строчках?
 

Автор: Akina 26.6.2006, 09:42
Вставить необходимое количество vbNewLine в нужных местах 

Автор: Bisy 27.6.2006, 00:17
Я уже думал сделать так, но если текст в два абзаца, то куда бы ло не шло, а если текст страниц так на 30, что тогда делать? 

Автор: Naghual 27.6.2006, 09:58
Тут уже задача усложняется.
Обычным Printer.Print - не обойдешся.

Нужно выводить на печать через API в контекст DC принтера.
Если еще и на страницы бить - нужен расчет на базе того-же API. 

Автор: SashaVinnica 27.6.2006, 20:18
Тут дествительно нужно поиграться с API. Я бы сделал это так... Читаеш текст из файла (или с чего ты там читаеш) в одну переменную, потом создаеш контекст совместимый с контекстом принтера определяеш какую площадь будет занимать текст, создаеш битовую карту совместимую с контекстом ширина которой равна ширине печатаемой страницы, а высота такая чтоб соблюсти площадь, и привязываеш ее к контексту. Потом вставляеш текст в созданый тобою контекст спомощью DrawText.  А дальше вобще просто, вырезаеш по очереди куски по высоте примерно равные странице, но кратные высоте строки, и вставляеш в контекст принтера.

P.S. я не гарантирую что это самый простой и правильный вариант, я не когда не делал этого, и все что я написал, я просто придумал как это можно реализовать известными мне методами.

P.P.S. По вопросам нужных API обращайся сюда icq: 326-231-397  

Автор: Bisy 28.6.2006, 00:46
Понятно, мысль уловил, попробую!
 

Автор: Naghual 29.6.2006, 09:19
SashaVinnica, я вижу это иначе, однако также не претендую на единственно верное решение.

Переменной типа Rect назначаем граничные размеры по горизонтали (ширина области печати страницы).
Затем при помощи DrawText с параметром DT_CALCRECT получаем высоту печатаемого куска текста (параграфа).

Далее по логике - либо печатаем на новой странице либо на этой-же. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)