Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.11.2012, 11:35   #1
AVer
Андрей
Форумчанин
 
Аватар для AVer
 
Регистрация: 21.11.2006
Сообщений: 457
По умолчанию События колеса мыши без фокуса

Добрый день. Столкнулся со следующей проблемой:

На форме лежит ScrollBox, на котором динамически создаются экземпляры самописного компонента на основе TCustomPanel. Собственно проблема заключается в том, что их много, и было бы неплохо прокручивать их колесом мыши, но панель не имеет фокуса и поэтому ни отлов WM_MouseWheel ни какой-либо другой способ не применим. Как прокрутить скроллбокс когда мышь находиться над этими компонентами? Заранее спасибо.
ICQ: 5311314
[SIGPIC][/SIGPIC]

Последний раз редактировалось AVer; 15.11.2012 в 11:39.
AVer вне форума Ответить с цитированием
Старый 15.11.2012, 12:10   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

ActiveControl:=ScrollBox; например в OnFormCreate и ScrollBox.OnMouseWheel уже работает
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 15.11.2012, 12:22   #3
AVer
Андрей
Форумчанин
 
Аватар для AVer
 
Регистрация: 21.11.2006
Сообщений: 457
По умолчанию

Повесил на OnMouseMove этих панелек - не помогло. Есть еще какие то мысли?
ICQ: 5311314
[SIGPIC][/SIGPIC]
AVer вне форума Ответить с цитированием
Старый 15.11.2012, 12:26   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А зачем на панели? Фокус на ScrollBox и его OnMouseWheel будет работать даже если курсор на панели. Скролинг то всего нужен, а не конкретной панели. А в событии определить к какому ControlScrollBar ближе курсор и делать вертикальный или горизонтальный скролинг
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 15.11.2012 в 12:29.
Аватар вне форума Ответить с цитированием
Старый 15.11.2012, 12:29   #5
AVer
Андрей
Форумчанин
 
Аватар для AVer
 
Регистрация: 21.11.2006
Сообщений: 457
По умолчанию

Возникло недопонимание. =) Я повесил ActiveControl:=ScrollBox на OnMouseMove панелей, то есть фокус на скроллбокс переводится постоянно когда мышь над панелями, так, для надежности. Но это не сработало.
ICQ: 5311314
[SIGPIC][/SIGPIC]
AVer вне форума Ответить с цитированием
Старый 15.11.2012, 12:32   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Тогда в ScrollBox.OnMouseMove делать при необходимости ActiveControl:=ScrollBox.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 15.11.2012, 12:35   #7
AVer
Андрей
Форумчанин
 
Аватар для AVer
 
Регистрация: 21.11.2006
Сообщений: 457
По умолчанию

Зачем? Он практически не виден из-за этих панелей, а там где виден скролл работает всегда, то есть он всегда в фокусе, но когда мышь над панелями скролл не обрабатывается.

Попробуйте кинуть на форму ScrollBox, а на него панель, выходящую за границы, так чтобы появилась полоса прокрутки и запустите. Покрутив скроллом поймете мою проблему. =)
ICQ: 5311314
[SIGPIC][/SIGPIC]

Последний раз редактировалось AVer; 15.11.2012 в 12:40.
AVer вне форума Ответить с цитированием
Старый 15.11.2012, 12:44   #8
xoodoo
Форумчанин
 
Регистрация: 11.04.2012
Сообщений: 212
По умолчанию

Обрабатываешь Application.OnMessage, ловишь там WM_MOUSEWHEEL.
lParam тебе даст абсолютные экранные координаты мышиного курсора.
Вызовом WindowFromPoint получаешь хендл окна под курсором.
Вызовом FindControl ищешь соответствующий винконтрол .
Если он найден и является твоим скроллбоксом, то крутишь его программно используя параметры, переданные в wparam.
xoodoo вне форума Ответить с цитированием
Старый 15.11.2012, 12:46   #9
AVer
Андрей
Форумчанин
 
Аватар для AVer
 
Регистрация: 21.11.2006
Сообщений: 457
По умолчанию

Пробовал и так, но когда курсор над панелью приложение как будто вообще не получает сообщения WM_MOUSEWHEEL.
ICQ: 5311314
[SIGPIC][/SIGPIC]
AVer вне форума Ответить с цитированием
Старый 15.11.2012, 12:53   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Покрутив скроллом поймете мою проблему
А я и попробовал. Даже если курсор над панелью ScrollBox.OnMouseWheel работает если ScrollBox в фокусе. И даже если курсор за пределами ScrollBox
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
пере- мещении колеса мыши и вывод информации об этом событии akhtamar Помощь студентам 1 21.02.2012 08:44
fsStayOnTop без фокуса Deight Общие вопросы Delphi 4 04.03.2011 19:36
Обработка колеса мыши в TScrollBox mutabor Общие вопросы Delphi 6 01.04.2010 10:17
использование колеса мыши Bayazet Общие вопросы Delphi 8 27.01.2009 14:39
Окно без фокуса Олвин Общие вопросы Delphi 4 13.10.2008 23:36