powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / DataGrid
29 сообщений из 29, показаны все 2 страниц
DataGrid
    #34132423
farbox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа , подскажите пожалуйста , как сделать что бы в элементе DataGrid (VB 6.0) строчки данных прокручивались колёсиком мыши ?
то есть :
есть DataGrid ,он выводит данные из базы. количество полей большое. сбоку у датагрида есть полоса прокрутки , но она не работает для колеса мыши. приходится передвигаться по записям с помощью курсора (передвигая полосу прокрутки).
как сделать что бы можно было оперировать колёсиком мыши ? может есть какие нибудь стандартные способы ?
...
Рейтинг: 0 / 0
DataGrid
    #34132519
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
DataGrid
    #34132973
farbox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вставил в модуль ваш код :
Код: 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.
54.
55.
Option Explicit
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
DataGrid
    #34133174
farbox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ау ау , ну кто нить подскажите как мне справиться со с кролом ?
...
Рейтинг: 0 / 0
DataGrid
    #34133183
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не выполнил процедуру AddScroll?
В гриде слишком мало записей?
...
Рейтинг: 0 / 0
DataGrid
    #34133261
farbox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
записей много в гриде.
а по какому событию выполнять процедуру AddScroll ?
...
Рейтинг: 0 / 0
DataGrid
    #34133276
farbox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и по какому событию выполнять RemoveScroll ?
...
Рейтинг: 0 / 0
DataGrid
    #34133412
farbox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ау есть кто нибудь ? так как же использовать
по какому событию , как запускать ?
я немного туповат в этом вопросе.
...
Рейтинг: 0 / 0
DataGrid
    #34133427
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AddScroll при загрузке формы, RemoveScroll при выгрузке.
...
Рейтинг: 0 / 0
DataGrid
    #34133458
farbox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СПАСИБО!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
КЛАССССССССС
НАКОНЕЦТО ВСЁ ОКЕЙ !!!!!!!!!!!!!!!!!!!!!!!!!!
СПАСИБО ЕЩЁ РАЗ СИНСЭЙ. :)
...
Рейтинг: 0 / 0
DataGrid
    #34212117
farbox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте, появились ослажнения.
Есть основной проект и дополнительный (в котором и был реализован скрол для DataGrid)
добавил модуль (SCrollForGrid) в основной проект, туда же добавил формы.
при вызове процедуры Call AddScroll(Ghurnal.DataGridSelGhurnal)
Выдайтся ошибка Type mismatch.
не понимаю почему.
Все референсы такие же как и были.

Что здесб может быть такого ? подскажите плиз .
...
Рейтинг: 0 / 0
DataGrid
    #34213309
farbox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
up
...
Рейтинг: 0 / 0
DataGrid
    #34213494
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что за тип Ghurnal.DataGridSelGhurnal? Не видя во что превратилась AddScroll и как она вызывается, не могу сказать точно.
...
Рейтинг: 0 / 0
DataGrid
    #34216621
farbox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyЧто за тип Ghurnal.DataGridSelGhurnal? Не видя во что превратилась AddScroll и как она вызывается, не могу сказать точно.

Ghurnal.DataGridSelGhurnal - это не тип, Ghurnal- это имя формы, DataGridSelGhurnal - имя datagrid.
Пробовал и без указания имени формы , т.е. просто call AddScroll(DataGridSelGhurnal) - не помогло..... :(
с модулем и процедурами в неё входящими ничего не делал.

Как исправить ситуацию? почему может не работать скрол ? и выдаавать такую странную ошибку ?
...
Рейтинг: 0 / 0
DataGrid
    #34217292
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Х.з. Попробуй AddScroll(Grid As Object )
...
Рейтинг: 0 / 0
DataGrid
    #34377014
userkot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ребята. есть вопрос. сам никак немогу вспомнить
есть datagrid, несколько строк.
как можно получить значение ячеек выделенной строки.

давно не работал с гридом, не могу вспомнить
спасибо
...
Рейтинг: 0 / 0
DataGrid
    #34377209
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что используется в качестве источника данных?
...
Рейтинг: 0 / 0
DataGrid
    #34379671
userkot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adodc на форму кидаю
...
Рейтинг: 0 / 0
DataGrid
    #34379783
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ADODC.Recordset("поле").value
...
Рейтинг: 0 / 0
DataGrid
    #34392845
userkot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо
...
Рейтинг: 0 / 0
DataGrid
    #34395082
userkot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот может кто знает
на форме ADODC + стандартный грид VB6
если для адодс как источник привязать запрос select * from таблица
и грдиду прописать источник данных adodc то на выходе у грида будут поля таки, как называются они в таблице

вопрос можно ли у грида заранее определить название полей ?
не трогая при этом адодс?
...
Рейтинг: 0 / 0
DataGrid
    #34395308
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зацени коллекцию Columns. Ты можешь вручную добавить необходимое количество колонок, Caption - подпись, DataField - поле рекордсета. Однако придется привязывать ADODC в коде, а не дизайне, потому что после добавления колонок и перед привязкой нужно выполнить HoldFields, чтобы колонки не сбросились.
...
Рейтинг: 0 / 0
DataGrid
    #34435339
Vanovich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Многоуважаемые, а не заметили ли Вы особенность, что сколлить таким способом можно только в том случае, если мы не находимся в режиме редактирования поля грида. Почему? Как сделать чтобы сколлить можно было в любом случае?
...
Рейтинг: 0 / 0
DataGrid
    #34563640
ЕленаMC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AntonariyНе выполнил процедуру AddScroll?
В гриде слишком мало записей?
А каким образом выполнить эту-самую процедуру AddScroll?
...
Рейтинг: 0 / 0
DataGrid
    #34563847
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Этот вопрос на минуту даже поставил меня в тупик...
Код: plaintext
AddScroll DataGrid1 
...
Рейтинг: 0 / 0
DataGrid
    #34563936
ЕленаMC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
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
на строке AddressOf WindowProc ругается... Invalid use addressOf operator
...
Рейтинг: 0 / 0
DataGrid
    #34563983
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Весь этот код должен находиться в модуле, а не форме.
...
Рейтинг: 0 / 0
DataGrid
    #34643496
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Более универсальный способ обработки колеса.
Отличия от предыдущего:
- Поддержка колеса добавляется всем гридам на форме одним вызовом AddScroll2Grids Me и они друг другу не мешают.
- Сабклассинг снимается автоматически.
- Скролл работает не зависимо от того, где находится фокус.
- Скролл работает в том гриде, над которым находится курсор мыши, опять таки независимо от фокуса.

Код: 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.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
Option Explicit

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 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 SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function GetProp Lib "user32" Alias "GetPropA" (ByVal hwnd As Long, ByVal lpString As String) As Long
Private Declare Function SetProp Lib "user32" Alias "SetPropA" (ByVal hwnd As Long, ByVal lpString As String, ByVal hData As Long) As Long
Private Declare Function RemoveProp Lib "user32" Alias "RemovePropA" (ByVal hwnd As Long, ByVal lpString As String) As Long
Private Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)

Private Type POINTAPI
    x As Long
    y As Long
End Type

Private Const WM_CLOSE = &H10
Private Const GWL_WNDPROC = - 4 

Public Sub AddScroll2Grids(Form As Form)
Dim Grid As Object
Dim p As Long
Dim hwnd As Long
    If Form.MDIChild Then
        hwnd = GetParent(Form.hwnd)
        hwnd = GetParent(hwnd)
    Else
        hwnd = Form.hwnd
    End If
    If GetProp(hwnd, "prevptr") =  0  Then
        p = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf FrmProc)
        SetProp hwnd, "prevptr", p
    End If
    For Each Grid In Form.Controls
        If TypeOf Grid Is DataGrid Then
            p = SetWindowLong(Grid.hwnd, GWL_WNDPROC, AddressOf WindowProc)
            SetProp Grid.hwnd, "prevptr", p
            SetProp Grid.hwnd, "gridptr", ObjPtr(Grid)
        End If
    Next
End Sub

Private Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim lpPrevWndProc As Long
Dim GridPtr As Long
Dim hwnd As Long
Dim pa As POINTAPI
Dim oList As Object
    lpPrevWndProc = GetProp(hw, "prevptr")
    If lpPrevWndProc =  0  Then Exit Function
    Select Case uMsg
        Case  522 
            GetCursorPos pa
            hwnd = WindowFromPoint(pa.x, pa.y)
            GridPtr = GetProp(hwnd, "gridptr")
            If GridPtr <>  0  Then
                Set oList = ObjFromPtr(GridPtr)
                If Abs(wParam) =  7864320  Then
                    oList.Scroll  0 , -(wParam / Abs(wParam))
                Else
                    oList.Scroll  0 , -(wParam / Abs(wParam)) *  10 
                End If
            End If
        Case WM_CLOSE
            RemoveProp hw, "prevptr"
            RemoveProp hw, "gridptr"
            SetWindowLong hw, GWL_WNDPROC, lpPrevWndProc
        Case Else
            WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg, wParam, lParam)
    End Select
End Function

Private Function FrmProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim lpPrevWndProc As Long
Dim hwnd As Long
Dim pa As POINTAPI
    lpPrevWndProc = GetProp(hw, "prevptr")
    Select Case uMsg
        Case  522 
            GetCursorPos pa
            hwnd = WindowFromPoint(pa.x, pa.y)
            If GetProp(hwnd, "prevptr") <>  0  Then SendMessage hwnd, uMsg, wParam, lParam
        Case WM_CLOSE
            RemoveProp hw, "prevptr"
            SetWindowLong hw, GWL_WNDPROC, lpPrevWndProc
        Case Else
            FrmProc = CallWindowProc(lpPrevWndProc, hw, uMsg, wParam, lParam)
    End Select
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
Период между сообщениями больше года.
DataGrid
    #37179504
ChicH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, форумчане!

нужна помощь...
Есть форма с DataGrid, в которую подгружается бд аксеса:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Dim db As ADODB.Connection
  Set db = New ADODB.Connection
  db.CursorLocation = adUseClient
  db.Open "PROVIDER=Microsoft.Jet.OLEDB.3.51;Data Source=C:\KorrespBaseback.mdb;"
  Set adoPrimaryRS = New ADODB.Recordset
  adoPrimaryRS.Open "select EnterNum,EnterDate,OutName,OutDate,Korr,Soderg,Ispolnit,DatePered,Otmetka,Komment from Base", db, adOpenStatic, adLockOptimistic
  Set grdDataGrid.DataSource = adoPrimaryRS
  mbDataChanged = True
  Exit Sub
AddErr:
  MsgBox "Убедитесь, что база расположена на диске С:\", vbCritical, "База не найдена"
End Sub

и есть форма с текстбоксами и контролом Data в который так же подгружается бд аксеса по средствам: DatacaseName: C:\KorrespBaseback.mdb

вопрос такой:

Как связать эти 2-е формы, чтоб при выборе записи в форме с DataGrid форма с текстбоксами меняла значения на выбранные в таблице DataGrid..

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


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