MDIForm

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

MDIForm

Сообщение noob4ever » 13.04.2007 (Пт) 18:26

Есть проверка на прокрутку колёсика мыши, вопрос как связать это с ScrollBar вертикальный???? у него даже имени нету!
единственное свойство MDIForm.ScrollBars=true(false)

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 13.04.2007 (Пт) 19:13

Для начала - внимательно прочитать вот это.
http://vbnet.mvps.org/index.html?code/s ... llbars.htm

Если вопросы останутся, задать их.

noob4ever
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 117
Зарегистрирован: 05.01.2006 (Чт) 0:58

Сообщение noob4ever » 13.04.2007 (Пт) 21:47

то не то что мне надо или я непонимаю (((
вообщем я отловил хуком в MDIForm значение wParam = -(+)7864320
Дальче мне что делать чтобы зная это заставить MDIScrollbar сместиться вниз или вверх в зав-ти от wParam??!!
Скажите пожалуйста.

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 13.04.2007 (Пт) 23:38

Рассказываю всем.

Скроллбар приаттачен к дочернему окну MDIForm с классом MDIClient.

Сначала мы ищем это окно:
Код: Выделить всё
mc = FindWindowEx(Me.hwnd, ByVal 0&, "MDIClient", vbNullString)

Затем нам нужно задекларировать вот что:
Код: Выделить всё
Private Const SB_VERT = 1

Private Const SIF_RANGE = &H1
Private Const SIF_PAGE = &H2
Private Const SIF_POS = &H4
Private Const SIF_DISABLENOSCROLL = &H8
Private Const SIF_TRACKPOS = &H10
Private Const SIF_ALL = (SIF_RANGE Or SIF_PAGE Or SIF_POS Or SIF_TRACKPOS)

Private Const SB_LINEUP = 0
Private Const SB_LINEDOWN = 1
Private Const SB_PAGEUP = 2
Private Const SB_PAGEDOWN = 3
Private Const SB_THUMBPOSITION = 4
Private Const SB_THUMBTRACK = 5
Private Const SB_TOP = 6
Private Const SB_BOTTOM = 7
Private Const SB_ENDSCROLL = 8

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

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

Private Declare Function SetScrollInfo Lib "user32" _
  (ByVal hwnd As Long, _
   ByVal n As Long, _
   lpcScrollInfo As SCROLLINFO, _
   ByVal fRedraw As Long) As Long

Private s As SCROLLINFO

Функцией GetScrollInfo мы определяем свойства скроллбара,
SetScrollInfo - наоборот, устанавливаем.

Как нам пишет MSDN,
BOOL GetScrollInfo(
HWND hwnd, // handle to window with scroll bar
int fnBar, // scroll bar flag
LPSCROLLINFO lpsi // pointer to structure for scroll parameters
);

...

lpsi
Pointer to a SCROLLINFO structure. Before calling GetScrollInfo, set the cbSize member of the structure to sizeof(SCROLLINFO), and set the fMask member to specify the scroll bar parameters to retrieve.

Следовательно, чтобы получить параметры скроллбара, используем вот это:
Код: Выделить всё
s.cbSize = Len(s)
s.fMask = SIF_POS Or SIF_RANGE

GetScrollInfo ByVal mc, ByVal SB_VERT, s

А чтобы установить, вот это:
Код: Выделить всё
s.fMask = SIF_POS
SetScrollInfo ByVal mc, ByVal SB_VERT, s, 1

Получаем диапазон возможных значений и положение скроллбара, затем проверяем, что от прокрутки положение не выйдет из допустимых пределов, затем меняем положение скроллбара.
Всё, скроллбар прокручен.

noob4ever
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 117
Зарегистрирован: 05.01.2006 (Чт) 0:58

Сообщение noob4ever » 14.04.2007 (Сб) 11:18

Private Sub MDIForm_Load()
mc = MDIФорма1.hwnd
Call SetHook(MDIФорма1.hwnd)
Форма1.Show
End Sub


в модуле:

Public Sub SetHook(hwnd As Long)
lngPrevProc = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf
WindowProc)
End Sub

Public Function WindowProc(ByVal hwnd As Long, _
ByVal Msg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long

If Msg = WM_MOUSEWHEEL Then
s.nPos = 20
Call SetScrollInfo(ByVal mc, ByVal SB_VERT, s, 1)
Else
WindowProc = CallWindowProc(lngPrevProc, hwnd, Msg, wParam, lParam)
End If

Почему то не рабоает ничего!! Все объявлено, просто тут не пишу.
s.nPos = 20 я передаю, а значение скроллбара не меняется


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

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

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

    TopList