Форум: "Основная";
Текущий архив: 2005.10.02;
Скачать: [xml.tar.bz2];
ВнизДвойное срабатывание события onMouseWheel Найти похожие ветки
← →
Monk © (2005-09-06 11:01) [0]Подскажите, пожалуйста, как избавиться от двойного срабатывания события onMouseWheel вместо одного.
← →
Monk © (2005-09-07 09:13) [1]Неужели никто не сталкивался?
← →
Digitman © (2005-09-07 10:48) [2]и чем тебе это помешало ?
← →
Monk © (2005-09-07 11:23) [3]скролинг осуществляется по записям, и из-за двойного срабатывания пролистывается через 1 запись
← →
Digitman © (2005-09-07 11:29) [4]
> по записям
записям чего ? набора данных, контролируемых наследником TDataSet ?
тогда ты вообще не в тот огород полез - у TDataSet есть навигационные события OnBefore/AfterScroll
← →
Monk © (2005-09-07 13:34) [5]Похоже, нужно конкретизировать вопрос.
Задача такая: при расположении курсора мыши над компонентом 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 раза.
← →
Anatoly Podgoretsky © (2005-09-07 13:45) [6]Смотри настройки в ОС
← →
Monk © (2005-09-07 13:55) [7]Где? В стандартных настройках мыши и, тем более, в настройках устройства мыши про скрол ничего нету, а специального программного обеспечения для мыши нету
← →
Anatoly Podgoretsky © (2005-09-07 13:58) [8]Есть где то настройка, в которой указывается на сколько строк происходит прокрутна на одно движение колеса. В реестре точно есть, но вроде и в диалогах также, по крайней мере многие твикеры делают это. Я предпочитаю прокрутку на 1 строку.
← →
Digitman © (2005-09-07 13:59) [9]
> событие onMouseScroll
какое такое onMouseScroll ?
нет у tdblookupListBox такого события ... ни Up ни Down ..
← →
Monk © (2005-09-07 14:05) [10]to Anatoly Podgoretsky: в диалогах не видел, посмотрю в реестре
to Digitman: это событие главной формой отслеживается. а дальше вычисляется, находится ли мышь во время скрола над компонентом
← →
Digitman © (2005-09-07 14:07) [11]а вообще говоря ситуация с многократным возбуждением события колеса м.б. вполне нормальной.
навигация по НД - операция не мгновенная,
если крутнуть колесо на более чем один шаг, то обработчик будет вызван немедленно, как будто был сделан один шаг,
но система помнит, что шагов было более одного, и как только сообщение о мышином событии будет обработано приложением, система вновь пошлет оное сообщение (извещая о как минимум еще одном необработанном приложением шаге колеса)
← →
Digitman © (2005-09-07 14:12) [12]
> это событие главной формой отслеживается
нет у TForm такого события - onMouseScroll
← →
Monk © (2005-09-07 14:15) [13]пардон, оговорился - имел ввиду onMouseWheel
← →
Anatoly Podgoretsky © (2005-09-07 14:22) [14]Monk © (07.09.05 14:05) [10]
to Anatoly Podgoretsky: в диалогах не видел, посмотрю в реестре
Не знаю как ты смотрел, я посмотрел в настройках мыши и сразу увидел закладку Wheel, на ней увидел на какое количество строк прокрутивать.
← →
Monk © (2005-09-07 14:25) [15]В панели управления? у меня в свойствах мыши вкладки "кнопки мыши", "указатели", "перемещение", "оборудование".
← →
Monk © (2005-09-07 14:33) [16]нашел в реестре такую ветку HKEY_CURRENT_USER\Control Panel\Desktop\WheelScrollLines. изменил с 3 на 1. результат нулевой
← →
Digitman © (2005-09-07 14:38) [17]т.е. ты утверждаешь, что двинув колесо РОВНО на 1 шаг ты получаешь более чем одно соответствующее MouseWheel-событие ?
← →
Monk © (2005-09-07 14:41) [18]а именно 2 раза
← →
Monk © (2005-09-07 14:46) [19]есть еще вот эта ветка HKEY_USERS\.DEFAULT\Control Panel\Desktop\WheelScrollLine. Результат тот же
← →
Anatoly Podgoretsky © (2005-09-07 14:51) [20]Monk © (07.09.05 14:33) [16]
Ну значит не в этом деле, но работа не в пустую будет работать в других местах, кстати а как с ними на сколько строк прокручивается, ну например эта ветка.
← →
Monk © (2005-09-07 16:32) [21]пришлось ввести дополнительную переменную типа 0..1 и после первого срабатывания onMouseWheel пропускать, а после второго делать nbNext и обнулять эту доп. переменную.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.10.02;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.004 c