|
|
|
скролл дочерней MDI формы...
|
|||
|---|---|---|---|
|
#18+
Есть форма MDI Child в VB6 больше размеров экрана, соответственно есть вертикальная прокрутка как в IE, но форма не прокручивается как в IE при помощи колёсика мыши, а очень бы хотелось чтобы колёсико мыши всё-таки работало. Так что помогите пожалуйста! Наверняка уже кто-то сталкивался и разбирался с этим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2005, 15:38 |
|
||
|
скролл дочерней MDI формы...
|
|||
|---|---|---|---|
|
#18+
Не уверен, что правильно понял, но: MDi child в развернутом виде имеет размер пэрента, это у тебя контролы расположены так, что вылезают за пределы видимой области. Придется на дочернюю форму положить скроллбар и программно менять координаты всех контролов в зависимости от его значения. Колесо работать не будет, разве что напихать обработку мышиных событий апишками. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2005, 11:27 |
|
||
|
скролл дочерней MDI формы...
|
|||
|---|---|---|---|
|
#18+
Попробую сформулировать поточнее: Форма 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 форме? На этом раз я надеюсь по доступнее получилось! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2005, 13:38 |
|
||
|
скролл дочерней MDI формы...
|
|||
|---|---|---|---|
|
#18+
А зачем его программно двигать? В зависимости от значения Wheel меняй координаты по вертикали дочернего окна, а пэрент сам перерисуется. Например так: frmChild.Top = frmChild.Top + Wheel * 10 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2005, 13:53 |
|
||
|
скролл дочерней MDI формы...
|
|||
|---|---|---|---|
|
#18+
Или даже так Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2005, 14:00 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=32951278&tid=2166041]: |
0ms |
get settings: |
9ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
195ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 255ms |
| total: | 540ms |

| 0 / 0 |
