RichTextBox & Scroll

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

RichTextBox & Scroll

Сообщение Scuder » 29.04.2004 (Чт) 13:27

Народ, возникла такая проблемка.. Есть RTB и длинный файл. Файл целиком в RTB не помещается. Скролы у RTB отключены. Lock = True, Enable = False. На форме есть ещё 2 кнопки "Скролл вверх" и "Скролл вниз". В общем-то задача и состоит в том, чтобы эти 2 кнопки работали. По поиску посмотрел, наткнулся на такой вот топик:

http://bbs.vbstreets.ru/viewtopic.php?t=5106&highlight=richtextbox

Но либо я затупил, либо это не совсем то.. В первом примере идёт прокрутка только того куска текста, который смог влезть в RTB. А во втором - textbox и, соответвенно, .txt.

Помогите, кто чем может.. :-)

P.S. Мне не нужна, в общем-то, плавная прокрутка.. То есть, всё равно как его скролить..

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 29.04.2004 (Чт) 16:26

Ну, если у тебя он не только залочен, но и задизаблен, то лучше скроллы-то включить - по крайней мере вертикальный. Иначе ты рискуешь не достучаться до прокрутки даже через SetScrollPos(), не говоря уже о WM_VSCROLL.

Scuder
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 334
Зарегистрирован: 17.08.2002 (Сб) 13:18
Откуда: Moscow, Russia

Сообщение Scuder » 29.04.2004 (Чт) 16:36

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

Но а дальше-то? Мне бы код увидеть, как этим скроллом программно управлять..

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 29.04.2004 (Чт) 16:48

Scuder писал(а):...Положу на него лэйбл, чтобы не видно было...


А, ну так что ж ты молчал, что тебе скроллы _нельзя_ показывать! Это уже сложнее.

Крутить ты его сможешь только через АПИ. Посмотри описание событий WM_VSCROLL (вертикальный) и WM_HSCROLL (горизонтальный). Также посмотри описание функции SetScrollPos() и всего, что там есть в разделе See Also. Навскидку могу сказать одно: он крутится через АПИ, это да, но я не уверен, будет ли он продолжать это делать при отключенных скроллбарах... Может и заартачиться. RTB в плане работы через АПИ вообще очень капризный, т.к. давно по-человечески не переписывался.

ЗЫ Кстати, не удивлюсь, если дрова какой-нить хитрой мыши смогут прокрутить его при клиторальном способе воздействия :) (в смысле, колесом).

Scuder
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 334
Зарегистрирован: 17.08.2002 (Сб) 13:18
Откуда: Moscow, Russia

Сообщение Scuder » 29.04.2004 (Чт) 17:26

Не, я ж говорю: я включу вертикальный скролл. Он визибл будет, просто я его визуально под лэйбл (точнее пикчер) спрячу. Это не проблема.

Чё-то я не понял там с инициализацией какой-то этих скроллов.. Если я просто вызываю FlatSB_SetScrollPos, значение SB_VERT меняется, но реально ничего не происходит даже после рефреша..

Scuder
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 334
Зарегистрирован: 17.08.2002 (Сб) 13:18
Откуда: Moscow, Russia

Сообщение Scuder » 29.04.2004 (Чт) 18:45

Блин, почему у "них" на Си работает, а у меня на ВБ - нет?? :-(

Код cpp:
http://forum.sources.ru/index.php?showtopic=20374&hl=em_scrollcaret
(смотреть самый последний ответ)

Делаю то же самое:

Код: Выделить всё
Private Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Const WM_VSCROLL = &H115


Private Sub ScrollUpB_Click()

SendMessageLong Me.RText.hwnd, WM_VSCROLL, 200, 0

End Sub


И ничего не происходит.. :-(

Scuder
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 334
Зарегистрирован: 17.08.2002 (Сб) 13:18
Откуда: Moscow, Russia

Сообщение Scuder » 29.04.2004 (Чт) 19:15

Вот я стормозил-то.. :-)
Короче..

Код: Выделить всё
Private Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Const WM_VSCROLL = &H115

Const SB_LINEUP = 0
Const SB_LINELEFT = 0
Const SB_LINEDOWN = 1
Const SB_LINERIGHT = 1
Const SB_PAGEUP = 2
Const SB_PAGELEFT = 2
Const SB_PAGEDOWN = 3
Const SB_PAGERIGHT = 3
Const SB_THUMBPOSITION = 4
Const SB_THUMBTRACK = 5
Const SB_TOP = 6
Const SB_LEFT = 6
Const SB_BOTTOM = 7
Const SB_RIGHT = 7
Const SB_ENDSCROLL = 8

Private Sub ScrollDownB_Click()

SendMessageLong Me.RText.hwnd, WM_VSCROLL, SB_LINEUP, 0

End Sub

Private Sub ScrollUpB_Click()

SendMessageLong Me.RText.hwnd, WM_VSCROLL, SB_LINEDOWN, 0

End Sub


О как! Это, конечно, не попиксельный скроллинг, а построчный, но это работает! :-)

Ennor, спасибо за подсказки!


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

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

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

    TopList