| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > VB6 > Печать из программы |
| Автор: Bisy 26.6.2006, 07:48 | ||
Сталкнулся с проблемой, как напечатать документ из программы. делает это объект Printer
Печатает почти как надо, однако обзац печатает в строчку (независимо от его длинны), как напечатать обзац на нескольких строчках? |
| Автор: 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 получаем высоту печатаемого куска текста (параграфа). Далее по логике - либо печатаем на новой странице либо на этой-же. |