powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / скролл дочерней MDI формы...
6 сообщений из 6, страница 1 из 1
скролл дочерней MDI формы...
    #32950070
Voody
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть форма MDI Child в VB6 больше размеров экрана, соответственно есть вертикальная прокрутка как в IE, но форма не прокручивается как в IE при помощи колёсика мыши, а очень бы хотелось чтобы колёсико мыши всё-таки работало.

Так что помогите пожалуйста! Наверняка уже кто-то сталкивался и разбирался с этим.
...
Рейтинг: 0 / 0
скролл дочерней MDI формы...
    #32950817
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не уверен, что правильно понял, но:

MDi child в развернутом виде имеет размер пэрента, это у тебя контролы расположены так, что вылезают за пределы видимой области. Придется на дочернюю форму положить скроллбар и программно менять координаты всех контролов в зависимости от его значения. Колесо работать не будет, разве что напихать обработку мышиных событий апишками.
...
Рейтинг: 0 / 0
скролл дочерней MDI формы...
    #32951222
Voody
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробую сформулировать поточнее:
Форма MDI Child больше размеров окна, поэтому на родительской форме появляется вертикальная полоса прокрутки, которая не работает от колёсика мыши.

Есть код который определеяет направление движение колёсика:

В переменную Wheel передаётся направление вращение: -1 при движении вниз или 1 при движении вверх
--------------------------------------------------------------------------------
'КОД ФОРМЫ
Option Explicit

Private Sub Form_Load()
Call Hook(Me.hwnd)
End Sub

Private Sub Form_Unload(Cancel As Integer)
Call UnHook(Me.hwnd)
End Sub


'КОД МОДУЛЯ
Option Explicit
Private Declare Function CallWindowProcA Lib "user32" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal MSG As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function SetWindowLongA Lib "user32" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function SetWindowTextA Lib "user32" (ByVal hwnd As Long, ByVal lpString As String) As Long
Private Const GWL_WNDPROC = -4
Private Const WM_MOUSEWHEEL = &H20A
Private lpPrevWndProc As Long, Wheel As Integer

Sub Hook(hwnd As Long)
lpPrevWndProc = SetWindowLongA(hwnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub

Sub UnHook(hwnd As Long)
Call SetWindowLongA(hwnd, GWL_WNDPROC, lpPrevWndProc)
End Sub

Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
On Error GoTo xErr
If uMsg = WM_MOUSEWHEEL Then
If wParam = -7864320 Or wParam = -23592960 Or wParam = -15728640 Then Wheel = -1
If wParam = 7864320 Or wParam = 23592960 Or wParam = 15728640 Then Wheel = 1
Call SetWindowTextA(Form1.hwnd, "Wheel " & Wheel)
Else
WindowProc = CallWindowProcA(lpPrevWndProc, hwnd, uMsg, wParam, lParam)
End If
xErr:
End Function

Вообщем этот код работает я проверял!

И мне сообственно нужно узнать как программно можно было двигать скроллбар на родительской MDI форме?

На этом раз я надеюсь по доступнее получилось!
...
Рейтинг: 0 / 0
скролл дочерней MDI формы...
    #32951278
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем его программно двигать? В зависимости от значения Wheel меняй координаты по вертикали дочернего окна, а пэрент сам перерисуется.
Например так: frmChild.Top = frmChild.Top + Wheel * 10
...
Рейтинг: 0 / 0
скролл дочерней MDI формы...
    #32951304
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или даже так

Код: plaintext
1.
2.
3.
4.
Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    If uMsg =  522  Then frmChild.Top = frmChild.Top + (wParam >  0 ) *  10 
    WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg, wParam, lParam)
End Function
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
скролл дочерней MDI формы...
    #33669083
xxxPaVelxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не подскажете пожалуста почему у меня при создании формы больших размеров (которая даже не помещается вся на экране) не появлается вертикальная прокрутка?

Заранее благодарю....
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / скролл дочерней MDI формы...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]