Как скролить окно своими кнопками?

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

Как скролить окно своими кнопками?

Сообщение GRS » 04.12.2005 (Вс) 22:48

Приветствую.

Собственно: корявый ScrollBar элемента RichTextBox не вписывается в общий стиль интерфейса моей программы. Как следствие RichTextBox.ScrollBars = rtfNone.

...но скрол-то нужен! Нарисовал свои стрелочки, вроде как "туды" и "сюды", чёт рабежался, думаю: ща быстро API функцию возьмём...

Короче искал, искал... Я так и не понял, что за RECT структура и для чего она, но, кажется это не самый такой радужный вариант. Конечно, сейчас у меня сапсем не фонтан: SendMessage (RichTextBox.HWnd, WM_KEYDOWN, 34, 0) и при нажатии аж страшно становится - ни о какой плавной прокруте речи быть не может.

Как выкрутиться? Как мне программно организовать прокрутку? Ну, не PAGE блин DOWN же эмулировать?!... У кого какие идеи, буду признателен. Повторюсь, ScrollWindow не получается, я вообще в нее врубиться не могу с этими RECT'ами...

Сообщение послать полю? Какое?

Спасибо.
Встану рано утром, выпью чашку ртути... Всё равно я сдохну в этом институте...

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 04.12.2005 (Вс) 23:24

Что-то в этом духе:
Public Declare Function GetScrollInfo Lib "user32" (ByVal hwnd As Long, ByVal n As Long, lpScrollInfo As SCROLLINFO) As Long
Public Declare Function GetScrollPos Lib "user32" (ByVal hwnd As Long, ByVal nBar As Long) As Long
Public Declare Function GetScrollRange Lib "user32" ( _
ByVal hwnd As Long, _
ByVal nBar As Long, _
lpMinPos As Long, _
lpMaxPos As Long) As Long
Public Declare Function SetScrollInfo Lib "user32" (ByVal hwnd As Long, ByVal n As Long, lpcScrollInfo As SCROLLINFO, ByVal bool As Boolean) As Long
Public Declare Function SetScrollRange Lib "user32" (ByVal hwnd As Long, ByVal nBar As Long, ByVal nMinPos As Long, ByVal nMaxPos As Long, ByVal bRedraw As Long) As Long
Public Declare Function SetScrollPos Lib "user32" (ByVal hwnd As Long, ByVal nBar As Long, ByVal nPos As Long, ByVal bRedraw As Long) As Long

Public Type SCROLLINFO
cbSize As Long
fMask As SIF_MASK 'Long
nMin As Long
nMax As Long
nPage As Long
nPos As Long
nTrackPos As Long
End Type


Сообщения:

Public Const WM_HSCROLL = &H114
Public Const WM_VSCROLL = &H115



А а RECT всё не просто, а очень просто - это всего-лишь прямоугольник, который задаётся своими границами (левая, правая, верх, низ).

GRS
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 186
Зарегистрирован: 29.02.2004 (Вс) 22:23
Откуда: Казахстан, Алматы

Сообщение GRS » 05.12.2005 (Пн) 5:03

Alexanbar, спасибо, буду разбираться... Как я понимаю - это наиболее радикальный метод решения подобного вопроса? Эх... :roll:
Встану рано утром, выпью чашку ртути... Всё равно я сдохну в этом институте...

GRS
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 186
Зарегистрирован: 29.02.2004 (Вс) 22:23
Откуда: Казахстан, Алматы

Сообщение GRS » 05.12.2005 (Пн) 8:45

Все оказалось на много проще, как всегда.

Код: Выделить всё
Private Const WM_VSCROLL = &H115
Private Const SB_LINEDOWN = 1
Private Const SB_LINEUP = 0

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long


И работает замечательно. Всем спасибо.
Встану рано утром, выпью чашку ртути... Всё равно я сдохну в этом институте...


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

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

Сейчас этот форум просматривают: AhrefsBot и гости: 188

    TopList