Проблема с печатью длинных строк.

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
werbersoft
Новичок
Новичок
Аватара пользователя
 
Сообщения: 31
Зарегистрирован: 09.11.2008 (Вс) 17:13
Откуда: Ростова-на-Дону

Проблема с печатью длинных строк.

Сообщение werbersoft » 09.11.2008 (Вс) 18:45

Пытаюсь печатать текст через Printer.Print, но дело в том, что иногда строка, которую я печатаю бывает слишком длинной и выходит за границы листа :cry: . Что делать?
Мирный программист, помогающий другим. Нехочу никого обижать и грубить.

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Re: Проблема с печатью длинных строк.

Сообщение SSecurity » 09.11.2008 (Вс) 18:51

Код: Выделить всё
printer.TextWidth


это даст тебе возможность узнать сколько там будет длина строки а дальше подбирать размер так чтоб нормально было остаток спускать на след. строку :)

Если я не ошибаюсь ... вставишь там VbCrLf в место переноса:)
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

werbersoft
Новичок
Новичок
Аватара пользователя
 
Сообщения: 31
Зарегистрирован: 09.11.2008 (Вс) 17:13
Откуда: Ростова-на-Дону

Re: Проблема с печатью длинных строк.

Сообщение werbersoft » 09.11.2008 (Вс) 18:59

А ещё я слышал есть специальные ActiveX-компоненты для печати, которые сами контролируют печать, чтобы ничего никуда не вылезало. Кто нибудь с такими сталкивался?
Мирный программист, помогающий другим. Нехочу никого обижать и грубить.

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Re: Проблема с печатью длинных строк.

Сообщение SSecurity » 09.11.2008 (Вс) 19:03

ну ты сам такой компонент создать могешь на базе тех правил которые сам хочешь:)
Просто интерсно как поведет себя компонент, если ты вдруг вопреки всему захочешь распечатать длинную строку :)))
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

werbersoft
Новичок
Новичок
Аватара пользователя
 
Сообщения: 31
Зарегистрирован: 09.11.2008 (Вс) 17:13
Откуда: Ростова-на-Дону

Re: Проблема с печатью длинных строк.

Сообщение werbersoft » 09.11.2008 (Вс) 19:36

Короче я понял. Нужно следующее (если на словах):

1. Выбираем шрифт, имеющий одинаковую ширину у всех символов (чтобы корректно считать длину строки).
2. Получаем строку и проверяем, больше ли число её символов длины листа (для каждого шрифта определённого размера).
3. Если она больше ширины листа, режем её на части и печатаем блоками.
Мирный программист, помогающий другим. Нехочу никого обижать и грубить.

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Re: Проблема с печатью длинных строк.

Сообщение SSecurity » 09.11.2008 (Вс) 19:46

В целом мысль правильная .... "Курьер" обычно подходит :))) но делить можно и по словам, чтоб читалось нормально ....
а можно делать так ...но это немного дольше

Если все разбить на слова и добавляя очередное слово формировать строки

Единственное если ты используешь vbCrLf у тебя интервал между строк мягко говоря будет задан принтером на основе размера шрифта, а если ты будешь текст бить на строки, тогда интервал можно задавать свой (соответсвуюшим смещением позиции Printer.CurrentY если мне память не изменяет)
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

werbersoft
Новичок
Новичок
Аватара пользователя
 
Сообщения: 31
Зарегистрирован: 09.11.2008 (Вс) 17:13
Откуда: Ростова-на-Дону

Re: Проблема с печатью длинных строк.

Сообщение werbersoft » 09.11.2008 (Вс) 22:54

Ок. В ближайшее время попробую чё нибудь наколдовать.
Мирный программист, помогающий другим. Нехочу никого обижать и грубить.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Проблема с печатью длинных строк.

Сообщение iGrok » 09.11.2008 (Вс) 23:56

SSecurity писал(а):Единственное если ты используешь vbCrLf у тебя интервал между строк мягко говоря будет задан принтером на основе размера шрифта, а если ты будешь текст бить на строки, тогда интервал можно задавать свой (соответсвуюшим смещением позиции Printer.CurrentY если мне память не изменяет)

Эмм.. Я, может, чего и путаю.. Но мне думается принтер не воспримет vbCrLf.

werbersoft писал(а):1. Выбираем шрифт, имеющий одинаковую ширину у всех символов (чтобы корректно считать длину строки).

Неа. Ты не всё понял. )
Есть Printer.TextWidth(text), который тебе возвращает длину строки text с учётом шрифтов, размером букв, и т.п. Поэтому моноширинный шрифт в общем-то не нужен. Как и число символов. )
Если увидел, что TextWidth больше Printer.Width - смотришь, насколько он больше, и ищешь ближайший пробел(или другой символ, подходящий для вставки переноса. К примеру, тире). Потом режешь строку по это место и печатаешь. С остатком строки выполняешь те же действия.
label:
cli
jmp label

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Re: Проблема с печатью длинных строк.

Сообщение SSecurity » 10.11.2008 (Пн) 4:38

iGrok писал(а):
SSecurity писал(а):Единственное если ты используешь vbCrLf у тебя интервал между строк мягко говоря будет задан принтером на основе размера шрифта, а если ты будешь текст бить на строки, тогда интервал можно задавать свой (соответсвуюшим смещением позиции Printer.CurrentY если мне память не изменяет)

Эмм.. Я, может, чего и путаю.. Но мне думается принтер не воспримет vbCrLf.


А ты попробуй:) У меня понимает, может у меня особенные принтер?:)
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

EUGY
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 214
Зарегистрирован: 09.11.2006 (Чт) 22:51
Откуда: Мурманск

Re: Проблема с печатью длинных строк.

Сообщение EUGY » 10.11.2008 (Пн) 6:04

Наверное незачем изобретать велосипед.
Ведь есть GetTextExtentExPoint, SetTextJustification, PolyTextOut.
Другое дело что начинающий с ними может не справиться. Только чья эта проблема:)

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: Проблема с печатью длинных строк.

Сообщение Andrey Fedorov » 11.11.2008 (Вт) 16:35

werbersoft писал(а):А ещё я слышал есть специальные ActiveX-компоненты для печати, которые сами контролируют печать, чтобы ничего никуда не вылезало. Кто нибудь с такими сталкивался?


Ты правильно слышал. Скорей всего и надо копать в этом направлении.
У VB6 есть примитивный по возможностям DataReport, а если хочешь вкусностей то лучше использовать ActiveReports от DataDynamics...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...


Вернуться в Visual Basic 1–6

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

Сейчас этот форум просматривают: Yandex-бот и гости: 57

    TopList