Всем привет,
Есть вопрос, наверно к Андрею.
В HTMLayout реализовано такое поведение — если событие прокрутки колесика мыши возникает на элементе с фокусом, то оно обрабатывается в этом элементе.
Так, для <input type="number"> это будет увеличение/уменьшение значения на step, в <select type="dropdown"> это будет выбор следующего/предыдущего элемента в списке.
Но вот, например, <input type="time"> (и вероятно, date) реагируют на mouse wheel даже если не имеют фокуса. Другие элементы, например с behavior: popup-selector просто игнорируют события от колесика мыши.
Можно ли это привести к какому-то одинаковому поведению?
Меня бы устроило и отсутствие реакции в элементах управления на колесико мыши. Для этого я пытался поставить обработчик на события мыши для всего документа и перехватывать их примерно таким способом:
BOOL my_event_handler::on_mouse(HELEMENT he, HELEMENT target, UINT event_type, POINT pt, UINT mouseButtons, UINT keyboardStates)
{
if ( event_type == (MOUSE_WHEEL | SINKING) )
{
return true;
}
return false;
}
Но так естественно перестает работать прокрутка содержимого документа, что хотелось бы оставить.
Здравствуйте, PM, Вы писали:
PM>Можно ли это привести к какому-то одинаковому поведению?
mouse wheel policy вообще-то унифицирована:
0. все mouse wheel события поступают главному htmlayout/sciter окну если оно само активное (имеет фокус внутри)
1. mouse wheel | sinking ловится и обрабатывается scrollable container'ом. Если такого нет то
2. необработанный mouse wheel поступает тому элементу над которым мышь находится.
PM>Меня бы устроило и отсутствие реакции в элементах управления на колесико мыши. Для этого я пытался поставить обработчик на события мыши для всего документа и перехватывать их примерно таким способом:
PM>Но так естественно перестает работать прокрутка содержимого документа, что хотелось бы оставить.
В принципе правильно, MOUSE_WHEEL задавили, но тогда надо (пере-)послать это событие нужному элементу:
virtual bool my_event_handler::handle_mouse(HELEMENT he, MOUSE_PARAMS& params )
{
if ( event_type == MOUSE_WHEEL | SINKING )
{
BOOL handled;
params.cmd = MOUSE_WHEEL;
params.target = he;
HTMLayoutTraverseUIEvent(HANDLE_MOUSE,¶ms,handled);
return true;
}
return false;
}
(Предполагается что my_event_handler стоит на html или body или что там у тебя scrollable)