Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.10.02;
Скачать: CL | DM;

Вниз

Двойное срабатывание события 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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.028 c
1-1126636918
TStas
2005-09-13 22:41
2005.10.02
Перехват сообщения


14-1126592667
Ega23
2005-09-13 10:24
2005.10.02
Лекция Никлауса Вирта


3-1123148835
alex_1_2_3_4
2005-08-04 13:47
2005.10.02
MySQL, ADO, error :-(


14-1126399770
Gorger
2005-09-11 04:49
2005.10.02
подкурить от компьютера


14-1126106890
NewWonder
2005-09-07 19:28
2005.10.02
Стал старостой