Как определить высоту RichTextBox'а

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Alex_new_2030
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 118
Зарегистрирован: 20.02.2003 (Чт) 8:00
Откуда: Kazakhstan

Как определить высоту RichTextBox'а

Сообщение Alex_new_2030 » 20.10.2003 (Пн) 8:50

Есть RichTextBox без прокрутки окна, Multiline=True.
В него загружаю текст (размер шрафта везде одинаков). шарина его задана конкретно (например 7000). Естественно не влезший в строку текст он переносит на новые строчки.
Как мне узнать какой размер высоты (RichTextBox.Height) нужно установить, что бы виден был весь текст?
Надеюсь объяснил доходчиво.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 20.10.2003 (Пн) 11:18

Код: Выделить всё
' попробуй так
Private Type SCROLLINFO
    cbSize As Long
    fMask As Long
    nMin As Long
    nMax As Long
    nPage As Long
    nPos As Long
    nTrackPos As Long
End Type

Const SIF_RANGE = &H1
Const SB_VERT = 1

Dim lHeight As Long, OnePixel As Long

Private Declare Function GetScrollInfo Lib "user32" (ByVal hwnd As Long, ByVal n As Long, lpScrollInfo As SCROLLINFO) As Long

Private Sub SetHeight(RTB As Control)
Dim S As SCROLLINFO, H As Long
S.cbSize = Len(S)
S.fMask = SIF_RANGE
Do
  Call GetScrollInfo(RTB.hWnd, SB_VERT, S)
  If S.nMax = 0 Then Exit Do
  H = S.nMax * Screen.TwipsPerPixelY
  RTB.Height = H
Loop
If H = 0 Then H = RTB.Height
RTB.Height = H
End Sub


Только поосторожнее с кодом :)
Я его в среде не проверял и если чуть ошибиться, то цикл Do...Loop получится бесконечным.
Lasciate ogni speranza, voi ch'entrate.

Alex_new_2030
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 118
Зарегистрирован: 20.02.2003 (Чт) 8:00
Откуда: Kazakhstan

Сообщение Alex_new_2030 » 20.10.2003 (Пн) 12:17

Что-то не пашет !?
вызываю Call SetHeight(RTBox1)
при етом S.nMax = 0 всегда.
Может я что-то не так сделал??

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 20.10.2003 (Пн) 15:20

Хм...
Вот рабочий код (с одной моей проги):
Код: Выделить всё
Dim S As ScrollInfo, H As Single
rtbAbout.Move picBox.ScaleLeft, picBox.ScaleTop, picBox.ScaleWidth, picBox.ScaleHeight
S.cbSize = Len(S)
S.fMask = SIF_RANGE
Do
  GetScrollInfo rtbAbout.hWnd, SB_VERT, S
  If S.nMax = 0 Then Exit Do
  If S.nMax = H Then Exit Do
  H = S.nMax
  rtbAbout.Height = H
Loop
If H > 0 Then rtbAbout.Height = H

rtbAbout размещен в picBox (ScaleMode=3). В свойствах rtbAbout выставлено MultiLine=True и ScrollBars=2.
Lasciate ogni speranza, voi ch'entrate.

Alex_new_2030
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 118
Зарегистрирован: 20.02.2003 (Чт) 8:00
Откуда: Kazakhstan

Сообщение Alex_new_2030 » 21.10.2003 (Вт) 7:07

Не, все равно что-то не так. Может мы друг друга не поняли?
Суть проблемы состоит в следующем:

В программе, для ускорения ввода данных сделал следующее: по нажатию функциональных клавиш или комбинации их с Shift, Alt, Ctrl
в текстовое окно вставляется заранее закрепленный за комбинацией текст (клиент сам заполняет для каждой комбинации определенный текст, какой - заранее не известно, но много).
Так вот, для просмотра возможных комбинаций и соответствующего им текста, я записываю весь этот текст в RichTextBox, форматирую его для более удобной читаемости. Запихиваю RichTextBox в Frame и начинаю смещать RichTextBox вверх RichTextBox.top=RichTextBox.top - n, где n-скорость перемещения. Получается что-то вроде титров.
Так вот проблема встала в высоте RichTextBox, какой размер высоты нужно установить чтобы весь текст прокручивался? А то он определенный кусочет прокручивает. А заранее количесто введенного текста не угадаешь.

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

Сообщение GSerg » 21.10.2003 (Вт) 9:17

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

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 21.10.2003 (Вт) 9:51

Код, который я дал, задает такую высоту контрола, чтобы весь текст в нем умещался без создания вертикальной полосы прокрутки. Странно, что этот код не работает у тебя, у меня все работает на ура.
Вот скриншот:
Изображение
Текст в окне -- это RichTextBox, который прокручивается по таймеру (он расположен в picBox и его реальный размер раза в три больше того, что виден на экране).
Lasciate ogni speranza, voi ch'entrate.

Alex_new_2030
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 118
Зарегистрирован: 20.02.2003 (Чт) 8:00
Откуда: Kazakhstan

Сообщение Alex_new_2030 » 22.10.2003 (Ср) 6:56

Заработало :) !!!!!
Как получилось сам не знаю, вроде ни чего не менял?????
Но вот проблемка. Кагда количество текста в окне увеличиваешь, то окно расширяется как положено. А вот когда текста делаешь меньше чем было до расширения окна предыдущим текстом, то оно не сужается, а остается неизменным :( ????
Хотя когда выполняешь код пошагово (F8) все нормально - уменьшает размер. В чем проблема???? Уже и Refresh текстбокса делал- все равно не помагает.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 22.10.2003 (Ср) 8:57

Это уже глюки самого RichTextBox, он вечно со ScrollBars гонит.
Попробуй после смены текста изменять его высоту на пиксел, а потом уже подгонять высоту.
Lasciate ogni speranza, voi ch'entrate.

Alex_new_2030
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 118
Зарегистрирован: 20.02.2003 (Чт) 8:00
Откуда: Kazakhstan

Сообщение Alex_new_2030 » 22.10.2003 (Ср) 12:15

Теперь получилось.
Нужно действительно после изменения текста - изменять размеры ричтекстбокса. Только оказывается не высоту, а ширину надо менять (уменьшил на 1). И все ОК.

Спасибо за помощь


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

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

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

    TopList  
cron