![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Двойное срабатывание события onMouseWheel [D7, Win2k]
Monk © (2005-09-06 11:01:00)Подскажите, пожалуйста, как избавиться от двойного срабатывания события onMouseWheel вместо одного.
Monk (2005-09-07 16:32:00) [1]пришлось ввести дополнительную переменную типа 0..1 и после первого срабатывания onMouseWheel пропускать, а после второго делать nbNext и обнулять эту доп. переменную.
Anatoly Podgoretsky (2005-09-07 14:51:00) [2]Monk © (07.09.05 14:33) [16]
Ну значит не в этом деле, но работа не в пустую будет работать в других местах, кстати а как с ними на сколько строк прокручивается, ну например эта ветка.
Monk (2005-09-07 14:46:00) [3]есть еще вот эта ветка HKEY_USERS\.DEFAULT\Control Panel\Desktop\WheelScrollLine. Результат тот же
Monk (2005-09-07 14:41:00) [4]а именно 2 раза
Digitman (2005-09-07 14:38:00) [5]т.е. ты утверждаешь, что двинув колесо РОВНО на 1 шаг ты получаешь более чем одно соответствующее MouseWheel-событие ?
Monk (2005-09-07 14:33:00) [6]нашел в реестре такую ветку HKEY_CURRENT_USER\Control Panel\Desktop\WheelScrollLines. изменил с 3 на 1. результат нулевой
Monk (2005-09-07 14:25:00) [7]В панели управления? у меня в свойствах мыши вкладки "кнопки мыши", "указатели", "перемещение", "оборудование".
Anatoly Podgoretsky (2005-09-07 14:22:00) [8]Monk © (07.09.05 14:05) [10]
to Anatoly Podgoretsky: в диалогах не видел, посмотрю в реестре
Не знаю как ты смотрел, я посмотрел в настройках мыши и сразу увидел закладку Wheel, на ней увидел на какое количество строк прокрутивать.
Monk (2005-09-07 14:15:00) [9]пардон, оговорился - имел ввиду onMouseWheel
Digitman (2005-09-07 14:12:00) [10]
> это событие главной формой отслеживается
нет у TForm такого события - onMouseScroll
Digitman (2005-09-07 14:07:00) [11]а вообще говоря ситуация с многократным возбуждением события колеса м.б. вполне нормальной.
навигация по НД - операция не мгновенная,
если крутнуть колесо на более чем один шаг, то обработчик будет вызван немедленно, как будто был сделан один шаг,
но система помнит, что шагов было более одного, и как только сообщение о мышином событии будет обработано приложением, система вновь пошлет оное сообщение (извещая о как минимум еще одном необработанном приложением шаге колеса)
Monk (2005-09-07 14:05:00) [12]to Anatoly Podgoretsky: в диалогах не видел, посмотрю в реестре
to Digitman: это событие главной формой отслеживается. а дальше вычисляется, находится ли мышь во время скрола над компонентом
Digitman (2005-09-07 13:59:00) [13]
> событие onMouseScroll
какое такое onMouseScroll ?
нет у tdblookupListBox такого события ... ни Up ни Down ..
Anatoly Podgoretsky (2005-09-07 13:58:00) [14]Есть где то настройка, в которой указывается на сколько строк происходит прокрутна на одно движение колеса. В реестре точно есть, но вроде и в диалогах также, по крайней мере многие твикеры делают это. Я предпочитаю прокрутку на 1 строку.
Monk (2005-09-07 13:55:00) [15]Где? В стандартных настройках мыши и, тем более, в настройках устройства мыши про скрол ничего нету, а специального программного обеспечения для мыши нету
Anatoly Podgoretsky (2005-09-07 13:45:00) [16]Смотри настройки в ОС
Monk (2005-09-07 13:34:00) [17]Похоже, нужно конкретизировать вопрос.
Задача такая: при расположении курсора мыши над компонентом tdblookupListBox и скролинге колесом вверх или вниз нужно переходить на следующую или предыдущую запись соответственно.
Я использую для реализации события onMouseScrollUp и onMouseScrollDown c таким кодом:
procedure TViewingForm.FormMouseWheelDown(Sender: TObject;
Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
var mp:TPoint;
begin
mp.X:=MousePos.X-ViewingForm.Left;
mp.Y:=MousePos.Y-ViewingForm.Top;
if ((mp.X>=DBLLB.Left) and (mp.X<=DBLLB.Left+DBLLB.Width))and
((mp.Y>=DBLLB.Top) and (mp.Y<=DBLLB.Top+DBLLB.Height)) then
DBNavigator1.BtnClick(nbNext)
end;
Так вот, событие onMouseScroll срабатывает 2 раза.
Digitman (2005-09-07 11:29:00) [18]
> по записям
записям чего ? набора данных, контролируемых наследником TDataSet ?
тогда ты вообще не в тот огород полез - у TDataSet есть навигационные события OnBefore/AfterScroll
Monk (2005-09-07 11:23:00) [19]скролинг осуществляется по записям, и из-за двойного срабатывания пролистывается через 1 запись
Digitman (2005-09-07 10:48:00) [20]и чем тебе это помешало ?