Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Двойное срабатывание события onMouseWheel [D7, Win2k]


Страницы:   1 2

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]

и чем тебе это помешало ?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо