Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Скроллинг в DBGrid / 3 сообщений из 3, страница 1 из 1
30.09.2005, 17:38
    #33299238
Fogkch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скроллинг в DBGrid
Народ!
На VB6(SP5) юзаю DBGrid из MSDBGRD.OCX.
Не получается:
1. Скролл мышью (ролик)
2. Бегунок двигаю, таблица пролисывается не синхронно. Курсор наверху, бегунок еще в середине и вверх не хочет.

Какой выход тут может помочь?
Может контрол другой притянуть или с этим чего сотворить?
...
Рейтинг: 0 / 0
03.10.2005, 10:24
    #33300644
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скроллинг в DBGrid
1)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (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 SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
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
Private Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Const GWL_WNDPROC = - 4 
Private Const WM_USER = &H400
Private Const WM_SETPREVPTR = WM_USER +  1 
Private Const WM_SETGRID = WM_USER +  2 
Private Const WM_RESTORE = WM_USER +  3 

Public Sub AddScroll(Grid As DataGrid)
Dim p As Long
    p = SetWindowLong(Grid.hwnd, GWL_WNDPROC, AddressOf WindowProc)
    SendMessage Grid.hwnd, WM_SETPREVPTR, p,  0 
    SendMessage Grid.hwnd, WM_SETGRID, ObjPtr(Grid),  0 
End Sub

Public Sub RemoveScroll(Grid As DataGrid)
    SendMessage Grid.hwnd, WM_RESTORE,  0 ,  0 
End Sub

Private Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Static lpPrevWndProc As Long
Static GridPtr As Long
Dim gList As Object
    If lpPrevWndProc =  0  And uMsg < WM_USER Then Exit Function
    Select Case uMsg
        Case  522 
            If GridPtr <>  0  Then
                Set gList = ObjFromPtr(GridPtr)
                If Abs(wParam) =  7864320  Then
                    gList.Scroll  0 , -(wParam / Abs(wParam))
                Else
                    gList.Scroll  0 , -(wParam / Abs(wParam)) *  10 
                End If
            End If
        Case WM_SETPREVPTR
            lpPrevWndProc = wParam
        Case WM_SETGRID
            GridPtr = wParam
        Case WM_RESTORE
            SetWindowLong hw, GWL_WNDPROC, lpPrevWndProc
    End Select
    WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg, wParam, lParam)
End Function

Private Function ObjFromPtr(lObjPtr As Long) As Object
Dim LoTmp As Object
    If lObjPtr <>  0  Then
        CopyMemory LoTmp, lObjPtr,  4 
        Set ObjFromPtr = LoTmp
        CopyMemory LoTmp,  0 &,  4 
    End If
End Function
...
Рейтинг: 0 / 0
28.04.2006, 10:14
    #33696438
Гарыныч
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скроллинг в DBGrid
попробовал реализовть примеч что-то не получается
ругается на AddressOf WindowProc

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


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