Выравнивание текста по ширине в TextBox

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Выравнивание текста по ширине в TextBox

Сообщение Sun07 » 15.09.2006 (Пт) 14:38

В TextBox существует 3 варианта выравнивания текста, но нет выравнивания текста по ширине. Как его сделать?

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 15.09.2006 (Пт) 14:40

Только вручную. Получать ширину символов строки, добавлять при необходимости пробелы и так далее. Вещчь довольно нудная.
Весь мир матрица, а мы в нем потоки байтов!

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 15.09.2006 (Пт) 16:24

Не такая уж и нудная
Код: Выделить всё
Function ExpandLine(TextLine as String, WidthNeed as Single) as String
Dim s() as String
Dim TextWidth, SpacesNeed, SpacesReplace, SpacesRest
Dim ret as String

s = Split(Trim(TextLine)," ")
TextWidth = Form.TextWidth(Trim(TextLine))
SpacesNeed = (WidthNeed - TextWidth)/Form.TextWidth(" ")
SpacesReplace = Fix(SpacesNeed / (UBound(s) + 1))
SpacesRest = SpacesNeed Mod (UBound(s) + 1)
If SpacesReplace>1 then
    ret = Replace(Trim(TextLine)," ",Space(SpacesReplace))
Else
    ret = Trim(TextLine)
End If
If SpacesRest > 0 Then
    y = 1
    For x=1 to SpacesRest
        y = Instr(y, ret, Space(SpacesReplace))
        ret = Replace(ret, Space(SpacesReplace), Space(SpacesReplace + 1), y, 1)
        y = y + SpacesReplace + 1
    Next x
End If
ExpandLine = ret
End Function
Вот как-то так. Естественно накатал не проверив :) Но идея, я думаю, ясна.
Лучший способ понять что-то самому — объяснить это другому.

Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Сообщение Sun07 » 15.09.2006 (Пт) 17:03

Ха, только хотел спросить, как Antonariy уже дал код. Сейчас посмотрим, как он работает. А у меня уже были такие мысли:

1. Для выравнивания текста по ширине достаточно подставить нужное число пробелов в строку или такое выравнивание осуществляется прорисовкой символов со смещением до пиксела?
2. Может, для выравнивания существуют пустые символы шириной в 1 пиксел?
3. Может, для выравнивания существуют спец. символы форматирования (в Юникоде, например)?

Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Сообщение Sun07 » 15.09.2006 (Пт) 21:04

хорошо, а как получить TextLine из TextBox c MultiLine=True?

Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Сообщение Sun07 » 15.09.2006 (Пт) 21:07

что такое Form.TextWidth?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 15.09.2006 (Пт) 21:09

Sun07, я почти уверен, что тебе уже говорили о том, что бывает с постящими подряд с интервалом в две минуты, вместо того, что использовать кнопку Правка.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Debugger
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1667
Зарегистрирован: 17.06.2006 (Сб) 15:11

Сообщение Debugger » 15.09.2006 (Пт) 21:15

Возможно, надо сплитить по строкам, делать то, что написано вверху, склеивать и выводить?

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 16.09.2006 (Сб) 6:22

Sun07 писал(а):
1. Для выравнивания текста по ширине достаточно подставить нужное число пробелов в строку или такое выравнивание осуществляется прорисовкой символов со смещением до пиксела?
2. Может, для выравнивания существуют пустые символы шириной в 1 пиксел?
3. Может, для выравнивания существуют спец. символы форматирования (в Юникоде, например)?


1. Нужное число пробелов
2. Нет.
3. Нет

Form.TextWidth - функция, определяющая ширину строки, выводимой шрифтом формы.
Весь мир матрица, а мы в нем потоки байтов!

Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Сообщение Sun07 » 16.09.2006 (Сб) 12:39

!Viper! писал(а):Form.TextWidth - функция, определяющая ширину строки, выводимой шрифтом формы.
.
а зачем мне шрифт формы, мне нужен шрифт текстбокса, хотя, можно перед вызовом этой функции присвоить форме шрифт текстбокса, а после - сразу восстановить прежний шрифт. А шрифт формы отражается в заголовке формы или это просто шрифт по умолчанию для всех контролов на форме?

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 16.09.2006 (Сб) 15:02

Шрифт формы отражается при печати на ней текста (оператором Print).
К шрифту заголовка он не имеет никакого отношения.
Изображение


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

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

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

    TopList