powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / И снова о скроллинге колесом мыши. MSFlexGrid
13 сообщений из 63, страница 3 из 3
И снова о скроллинге колесом мыши. MSFlexGrid
    #36758939
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
h7h2vC,

/topic/703320&pg=-1#7805030
...
Рейтинг: 0 / 0
И снова о скроллинге колесом мыши. MSFlexGrid
    #36758982
h7h2vC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProОп, и еще одна проблемка возникла: если в режиме отладки возникает неперехватываемая ошибка - Debug не работает, видимо из-за того, что обработчик сообщений для главного окна программы уже испорчен, но сама прога на VB уже не выполняется.

Видимо, придется запретить перехват для MDI формы при работе из-под IDE.

По пердыдущему вопросу - UP!
Я скорее всего чего-то не понимаю, но вот несколько моментов:
1) Неперехватываемых ошибок при выгрузке формы никаких не возникает. Код отлажен, в скомпилированном модуле выход проходит нормально.
2) MDI форм в проекте нет
3) А все-таки что же делать?
...
Рейтинг: 0 / 0
И снова о скроллинге колесом мыши. MSFlexGrid
    #36759034
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
h7h2vC,

Убедитесь, что при закрытии формы срабатывает ветка
Код: plaintext
1.
        Case WM_CLOSE
            RemoveProp hw, PROP_PREVPROC
дело где-то вокруг того, что не очищается оконный обработчик.
...
Рейтинг: 0 / 0
И снова о скроллинге колесом мыши. MSFlexGrid
    #36759204
h7h2vC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro, был неправ - на WinXP тоже вылетает, просто без ошибки - схлопывается и все.

В Case перед RemoveProp поставил MsgBox - сообщения при выходе не было.
...
Рейтинг: 0 / 0
И снова о скроллинге колесом мыши. MSFlexGrid
    #36759254
h7h2vC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вместо MsgBox поставил App.LogEvent - сообщение в журнале не появилось..
...
Рейтинг: 0 / 0
И снова о скроллинге колесом мыши. MSFlexGrid
    #36759525
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
h7h2vC,

Значит именно в этом причина.
Попробуйте поставить remove насильно к примеру на Form_Unload.

А что такое "закрытие приложения из под IDE"? вы, часом, не на Stop жмете????
...
Рейтинг: 0 / 0
И снова о скроллинге колесом мыши. MSFlexGrid
    #36759550
h7h2vC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro, поставил RemoveProp hWnd, "prevptr" в Form_Unload. Процедура отработала и все-равно после этого программа вылетела с ошибкой.

На Stop не жму, закрываю крестом или Alt+F4.
...
Рейтинг: 0 / 0
И снова о скроллинге колесом мыши. MSFlexGrid
    #36759592
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот эта ветка отрабатывает?
Код: plaintext
1.
2.
3.
4.
5.
        Case WM_CLOSE
            RemoveProp hw, PROP_PREVPROC
            RemoveProp hw, PROP_GRIDPTR
            RemoveProp hw, PROP_DELTA
            SetWindowLong hw, GWL_WNDPROC, lPrevWndProc
...
Рейтинг: 0 / 0
И снова о скроллинге колесом мыши. MSFlexGrid
    #36759603
h7h2vC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro, нет - не выполняется.

Я создал новый пустой проект с одним только гридом и он выгружается нормально - так что думаю мне нужно будет искать какие-то другие косяки в программе..
...
Рейтинг: 0 / 0
И снова о скроллинге колесом мыши. MSFlexGrid
    #36759620
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
h7h2vCShocker.Pro, нет - не выполняется.

Я создал новый пустой проект с одним только гридом и он выгружается нормально - так что думаю мне нужно будет искать какие-то другие косяки в программе..
remove должно сработать для всего, для чего был set, иначе IDE вылетает аварийно и правильно делает. Ищите косяки.
...
Рейтинг: 0 / 0
И снова о скроллинге колесом мыши. MSFlexGrid
    #36760649
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
посмотрите может этот вариант подойдет , нашел в инете

Код: 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.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' модуль для прокручивания msflexgrid 
' Private Sub Form_Load()
' Hook Form & Control to be ignored
'  Call WheelHook(Me.hWnd)
'  Call WheelHook(Combo1.hWnd)
'  Combo1.Tag = "Hooked"
'  Call WheelHook(Text1.hWnd)
'Option Explicit
'Private Sub Form_Unload(Cancel As Integer)
'  Call WheelUnHook(Me.hWnd)
'  Call WheelUnHook(Combo1.hWnd)
'  Combo1.Tag = "UnHooked"
'  Call WheelUnHook(Text1.hWnd)
'End Sub
' Here you can add scrolling support to controls that don't normally respond
'Public Sub MouseWheel(ByVal MouseKeys As Long, ByVal Rotation As Long, ByVal Xpos As Long, ByVal Ypos As Long)
'  Dim ctl As Control
'
'  For Each ctl In Me.Controls
'    If TypeOf ctl Is MSFlexGrid Then
'      If IsOver(ctl.hWnd, Xpos, Ypos) Then FlexGridScroll ctl, MouseKeys, Rotation, Xpos, Ypos
'    End If
'  Next ctl
'End Sub



Private Declare Function GetProp Lib "user32.dll" Alias "GetPropA" ( _
                ByVal hWnd As Long, _
                ByVal lpString As String) As Long

Private Declare Function SetProp Lib "user32.dll" Alias "SetPropA" ( _
                ByVal hWnd As Long, _
                ByVal lpString As String, _
                ByVal hData As Long) As Long

Private Declare Function RemoveProp Lib "user32.dll" Alias "RemovePropA" ( _
                ByVal hWnd As Long, _
                ByVal lpString As String) As Long

Private Declare Function CallWindowProc Lib "user32.dll" 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.dll" Alias "SetWindowLongA" ( _
                ByVal hWnd As Long, _
                ByVal nIndex As Long, _
                ByVal dwNewLong As Long) As Long

Private Declare Function GetWindowRect Lib "user32" ( _
                ByVal hWnd As Long, _
                lpRect As RECT) As Long
                
Private Declare Function GetParent Lib "user32" ( _
                ByVal hWnd As Long) As Long

Public Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" ( _
                ByVal hWnd As Long, _
                ByVal Msg As Long, _
                wParam As Any, _
                lParam As Any) As Long

Private Const GWL_WNDPROC = - 4 
Private Const WM_MOUSEWHEEL = &H20A
Private Const CB_GETDROPPEDSTATE = &H157

Private Type RECT
  Left As Long
  Top As Long
  Right As Long
  Bottom As Long
End Type

Private Function WindowProc(ByVal Lwnd As Long, ByVal Lmsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  Dim MouseKeys As Long
  Dim Rotation As Long
  Dim Xpos As Long
  Dim Ypos As Long
  Dim fFrm As Form

  Select Case Lmsg
  
    Case WM_MOUSEWHEEL
    
      MouseKeys = wParam And  65535 
      Rotation = wParam /  65536 
      Xpos = lParam And  65535 
      Ypos = lParam /  65536 
      
      Set fFrm = GetForm(Lwnd)
      If fFrm Is Nothing Then
        ' it's not a form
        If Not IsOver(Lwnd, Xpos, Ypos) And IsOver(GetParent(Lwnd), Xpos, Ypos) Then
          ' it's not over the control and is over the form,
          ' so fire mousewheel on form (if it's not a dropped down combo)
          If SendMessage(Lwnd, CB_GETDROPPEDSTATE,  0 &,  0 &) <>  1  Then
            GetForm(GetParent(Lwnd)).MouseWheel MouseKeys, Rotation, Xpos, Ypos
            Exit Function ' Discard scroll message to control
          End If
        End If
      Else
        ' it's a form so fire mousewheel
        If IsOver(fFrm.hWnd, Xpos, Ypos) Then fFrm.MouseWheel MouseKeys, Rotation, Xpos, Ypos
      End If
  End Select
  
  WindowProc = CallWindowProc(GetProp(Lwnd, "PrevWndProc"), Lwnd, Lmsg, wParam, lParam)
End Function

Public Sub WheelHook(ByVal hWnd As Long)
  On Error Resume Next
  SetProp hWnd, "PrevWndProc", SetWindowLong(hWnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub

Public Sub WheelUnHook(ByVal hWnd As Long)
  On Error Resume Next
  SetWindowLong hWnd, GWL_WNDPROC, GetProp(hWnd, "PrevWndProc")
  RemoveProp hWnd, "PrevWndProc"
End Sub

Public Sub FlexGridScroll(ByRef FG As MSFlexGrid, ByVal MouseKeys As Long, ByVal Rotation As Long, ByVal Xpos As Long, ByVal Ypos As Long)
  Dim NewValue As Long
  Dim Lstep As Single

  On Error Resume Next
  With FG
    Lstep = .Height / .RowHeight( 0 )
    Lstep = Int(Lstep)
    If .Rows < Lstep Then Exit Sub
    Do While Not (.RowIsVisible(.TopRow + Lstep))
      Lstep = Lstep -  1 
    Loop
    If Rotation >  0  Then
        NewValue = .TopRow - Lstep
        If NewValue <  1  Then
            NewValue =  1 
        End If
    Else
        NewValue = .TopRow + Lstep
        If NewValue > .Rows -  1  Then
            NewValue = .Rows -  1 
        End If
    End If
    .TopRow = NewValue
  End With
End Sub

Public Function IsOver(ByVal hWnd As Long, ByVal lX As Long, ByVal lY As Long) As Boolean
  Dim rectCtl As RECT
  GetWindowRect hWnd, rectCtl
  With rectCtl
    If lX >= .Left And lX <= .Right And lY >= .Top And lY <= .Bottom Then IsOver = True
  End With
End Function

Private Function GetForm(ByVal hWnd As Long) As Form
  For Each GetForm In Forms
    If GetForm.hWnd = hWnd Then Exit Function
  Next GetForm
  Set GetForm = Nothing
End Function

...
Рейтинг: 0 / 0
И снова о скроллинге колесом мыши. MSFlexGrid
    #37106635
`dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите пожалуйста как прикрутить к MS H Flexgrid.
...
Рейтинг: 0 / 0
И снова о скроллинге колесом мыши. MSFlexGrid
    #37106759
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Точно так же как к остальным. Мой код поддерживает MSHFlexgrid.
...
Рейтинг: 0 / 0
13 сообщений из 63, страница 3 из 3
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / И снова о скроллинге колесом мыши. MSFlexGrid
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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