|
И снова о скроллинге колесом мыши. MSFlexGrid
|
|||
---|---|---|---|
#18+
Собственно, поиском попользовался, почитал о решениях проблемы со скроллингом например для DataGrid - http://sql.ru/forum/actualthread.aspx?tid=93660 У MSFlexGrid, правда, нет метода Scroll. Т.е., видимо, надо пользоваться TopRow... Но, собственно, вопрос такой. Вот тут: http://support.microsoft.com/kb/837910/en-us сказано: microsoftMouse wheel support in Visual Basic 6.0 is a function of the mouse driver. The WM_MOUSEWHEEL message is sent to the Focus window when you rotate the mouse wheel. Because the Visual Basic 6.0 IDE does not have built-in support for scrolling by using the mouse wheel, the IDE ignores the WM_MOUSEWHEEL message. However, IntelliPoint software version 4.12 provides mouse wheel support and converts the WM_MOUSEWHEEL message to WM_SCROLL. IntelliPoint software version 4.9 and later versions do not have this feature. Так может просто перехватывать сообщение WM_MOUSEWHEEL для окна и конвертировать его в WM_SCROLL? Тогда метод будет достаточно универсальный и его можно будет применять везде, где нужна прокрутка (например в комбобоксах). Ведь при установке некоторых драйверов (в частности драйвер genius-овский драйвер от NetScroll "с глазами") скролл работает во всех Vb-шных контролах. Кто тут силен в API? Можно ли так сделать? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2009, 00:29 |
|
И снова о скроллинге колесом мыши. MSFlexGrid
|
|||
---|---|---|---|
#18+
Все уже давно сделано. Код: 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.
Jah loves you. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2009, 10:43 |
|
И снова о скроллинге колесом мыши. MSFlexGrid
|
|||
---|---|---|---|
#18+
Shocker.ProТогда метод будет достаточно универсальный и его можно будет применять везде, где нужна прокрутка (например в комбобоксах).Во всех остальных стандартных контролах колесо и так работает. Jah loves you. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2009, 11:50 |
|
И снова о скроллинге колесом мыши. MSFlexGrid
|
|||
---|---|---|---|
#18+
ещё не забывает про чудо-мышки от компании гениус, у них траблы с дровами для работы с vb-прогами , где колесо нужно ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2009, 12:05 |
|
И снова о скроллинге колесом мыши. MSFlexGrid
|
|||
---|---|---|---|
#18+
AntonariyВсе уже давно сделано. Спасибо! Первичное курение кода показало, что он рассчитан на то, что грид тупо лежит на форме. У меня же гриды лежат в основном внутри юзерконтролов, юзерконтролы могут лежать в других юзерконтролах и фреймах в произвольной комбинации. Кроме того, обработку скролла хочется реализовать на уровне нижнего контрола, содержащего грид, он лежит в отдельной ActiveX-библиотеке и не представляет, куда его закинет судьба, а, тем временем, приведенный вами код требует наличие hwnd от формы, причем, в случае MDI-проекта - от MDI-формы. Я могу спустить на уровень юзерконтрола MYMDIForm.hwnd - это решит поблему? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.10.2009, 18:10 |
|
И снова о скроллинге колесом мыши. MSFlexGrid
|
|||
---|---|---|---|
#18+
Shocker.ProЯ могу спустить на уровень юзерконтрола MYMDIForm.hwnd - это решит поблему?Если это вообще возможно, то только добавит новые. Shocker.Proтем временем, приведенный вами код требует наличие hwnd от формы, причем, в случае MDI-проекта - от MDI-формыПервым делом WM_MOUSEWHEEL получает форма, а пооследним — тот контрол, в котором находится фокус. Мне хотелось сделать скролл, который не зависит от фокуса, это удобней. Если это вам не надо, можете избавиться от FrmProc. Shocker.ProКроме того, обработку скролла хочется реализовать на уровне нижнего контролаНикаких проблем, лишнее убрал. Код: plaintext 1. 2. 3. 4. 5.
Jah loves you. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2009, 11:26 |
|
И снова о скроллинге колесом мыши. MSFlexGrid
|
|||
---|---|---|---|
#18+
AntonariyЕсли это вообще возможно, то только добавит новые.Упс, не правильно понял. Да, можете и решит. Jah loves you. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2009, 11:28 |
|
И снова о скроллинге колесом мыши. MSFlexGrid
|
|||
---|---|---|---|
#18+
AntonariyМне хотелось сделать скролл, который не зависит от фокуса, это удобней. Если это вам не надо, можете избавиться от FrmProc. А, ну то есть я спокойно могу перехватывать сообщение на уровне MSFlexGrid.hwnd и будет работать (но при условии, что фокус стоит на сетке)? А в вашем варианте получается, что скролл будет работать в активной форме, даже если курсор не находится непосредственно над сеткой? или он дополнительно проверяет координаты? (извините, в функциях АПИ совсем не силен). ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2009, 11:44 |
|
И снова о скроллинге колесом мыши. MSFlexGrid
|
|||
---|---|---|---|
#18+
Shocker.Proили он дополнительно проверяет координаты?Именно. FrmProc: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Jah loves you. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2009, 13:34 |
|
И снова о скроллинге колесом мыши. MSFlexGrid
|
|||
---|---|---|---|
#18+
Shocker.ProА, ну то есть я спокойно могу перехватывать сообщение на уровне MSFlexGrid.hwnd и будет работать (но при условии, что фокус стоит на сетке)?Да. Jah loves you. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2009, 13:37 |
|
И снова о скроллинге колесом мыши. MSFlexGrid
|
|||
---|---|---|---|
#18+
Ух! Работает без обработки напильником! Спасибо. Я разнес использование: GridProc затолкал внутрь юзерконтрола и он там себе спокойно переваривается и инициализируется в момент загрузки контрола, а FrmProc определил на уровне MDI_Form-ы, инициализация идет в момент загрузки приложения. Единственная осталась неприятность: Если фокус стоит на комбобоксе или, скажем treeview, то крутится не сетка, а фокусный контрол, даже если курсор летает над сеткой. Особенно неприятно с комбобоксом, так как, как правило, это фильтр или сортировка для сетки и его смена заставляет сетку обновляться. Уважаемый гуру, можно это победить? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2009, 21:26 |
|
И снова о скроллинге колесом мыши. MSFlexGrid
|
|||
---|---|---|---|
#18+
Оп, и еще одна проблемка возникла: если в режиме отладки возникает неперехватываемая ошибка - Debug не работает, видимо из-за того, что обработчик сообщений для главного окна программы уже испорчен, но сама прога на VB уже не выполняется. Видимо, придется запретить перехват для MDI формы при работе из-под IDE. По пердыдущему вопросу - UP! ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2009, 13:26 |
|
И снова о скроллинге колесом мыши. MSFlexGrid
|
|||
---|---|---|---|
#18+
Antonariy, UP :( ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2009, 10:11 |
|
И снова о скроллинге колесом мыши. MSFlexGrid
|
|||
---|---|---|---|
#18+
AntonariyПервым делом WM_MOUSEWHEEL получает форма, а пооследним — тот контрол, в котором находится фокус.Здесь я наврал. На самом деле первым получает контрол, если он событие отработал, то дальше оно не идет. По-видимому с этим ничего не сделаешь. При фокусе в комбо в форму приходит только WM_COMMAND. Jah loves you. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2009, 13:51 |
|
И снова о скроллинге колесом мыши. MSFlexGrid
|
|||
---|---|---|---|
#18+
AntonariyЗдесь я наврал. На самом деле первым получает контрол, если он событие отработал, то дальше оно не идет. По-видимому с этим ничего не сделаешь. При фокусе в комбо в форму приходит только WM_COMMAND. Гм. А если перехватить обработку на уровне комбобокса (благо он тоже обернут в ActiveX-юзерконтрол)? И, если курсор мыши не находится непосредственно над ним, отменить и передать дальше? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2009, 14:01 |
|
И снова о скроллинге колесом мыши. MSFlexGrid
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2009, 14:45 |
|
И снова о скроллинге колесом мыши. MSFlexGrid
|
|||
---|---|---|---|
#18+
AntonariyРади бога) Можно передавать его форме. Я имел ввиду не передачу куда-то конкретно, а передачу по цепочке. Таким образом, чтобы оно дошло до вышестоящего уровня (MDI-формы) вне зависимости от того, сколько вложенных hwnd встретится на его пути. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2009, 14:56 |
|
И снова о скроллинге колесом мыши. MSFlexGrid
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2009, 17:17 |
|
И снова о скроллинге колесом мыши. MSFlexGrid
|
|||
---|---|---|---|
#18+
AntonariyПо цепочке не надо. Лучше вставить обработку WM_MOUSEWHEEL из FrmProc. Вставил, в принципе работает, кроме самого себя, т.е. при попытке навести мыша на сам комбобокс и прокрутить, прога вылетает мгновенно вместе с IDE без всяких сообщений (видимо из-за переполнения стека, так как он видимо зацикливается на отправке сообщений самому себе). P.S. Помогла доработка процедуры FrmProc до: Код: plaintext 1. 2. 3. 4. 5. 6. 7.
Таким образом работает и сетка и сам комбобокс, когда курсор находится над ними. Но если фокус стоит на комбобоксе, а курсор летает над TreeView, то TreeView не крутится. Почему так, он игнорирует SendMessage? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2009, 01:43 |
|
И снова о скроллинге колесом мыши. MSFlexGrid
|
|||
---|---|---|---|
#18+
SendMessage до него не доходит из-за проверки наличия PROP_PREVPROC. Наверное можно ее убрать в вашем случае. Jah loves you. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2009, 10:54 |
|
И снова о скроллинге колесом мыши. MSFlexGrid
|
|||
---|---|---|---|
#18+
AntonariySendMessage до него не доходит из-за проверки наличия PROP_PREVPROC. Наверное можно ее убрать в вашем случае. Тогда возникают другие глюки.... Пытаюсь подобрать рабочую комбинацию... Скажите, а в чем разница между SendMessage hwnd, uMsg, wParam, lParam и FrmProc = CallWindowProc(lPrevWndProc, hwnd, uMsg, wParam, lParam) ? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2009, 20:46 |
|
И снова о скроллинге колесом мыши. MSFlexGrid
|
|||
---|---|---|---|
#18+
> Скажите, а в чем разница между > SendMessage hwnd, uMsg, wParam, lParam Это ты посылаешь uMsg с помощью сообщений Windows, и пока сообщение не будет принято, отправляемая программа ждет, иногда лучше использовать PostMessage, которая просто отправляет сообщение и не задерживает программу. > FrmProc = CallWindowProc(lPrevWndProc, hwnd, uMsg, wParam, lParam) А это просто вызов функции, со всеми вытекающими последствиями Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2009, 11:13 |
|
И снова о скроллинге колесом мыши. MSFlexGrid
|
|||
---|---|---|---|
#18+
Игорь Горбонос, Как раз "вытекающие последствия" меня и интересуют. Я понимаю, что одно из них "отправить сообщение", другое "вызвать функцию" Но так как в вышеприведенной программе используются оба способа в рамках одной функции (FrmProc), значит есть какая-то принципиальная разница, вот я ее я и хочу понять для отладки. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2009, 11:37 |
|
И снова о скроллинге колесом мыши. MSFlexGrid
|
|||
---|---|---|---|
#18+
> Как раз "вытекающие последствия" меня и интересуют. > Но так как в вышеприведенной программе используются оба способа в рамках одной функции (FrmProc), значит есть > какая-то принципиальная разница, вот я ее я и хочу понять для отладки. принципиальная разница в том, что сообщения можно слать кому угодно, не только своим контролам и при этом задействуется внешний механизм передачи сообщений Windows, а вызывать функцию, можно только получив доступ в адресное пространство Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2009, 12:25 |
|
И снова о скроллинге колесом мыши. MSFlexGrid
|
|||
---|---|---|---|
#18+
Игорь Горбоноспринципиальная разница в том, что сообщения можно слать кому угодно, не только своим контролам и при этом задействуется внешний механизм передачи сообщений Windows, а вызывать функцию, можно только получив доступ в адресное пространство Ну это с точки зрения вызова. А с точки зрения функционирования в данном конкретном случае (то есть в пределах моего приложения) есть какая-то разница? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2009, 14:29 |
|
|
start [/forum/topic.php?fid=60&msg=36252533&tid=2158974]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
35ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
others: | 315ms |
total: | 445ms |
0 / 0 |