Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-1126683651
Tonich
2005-09-14 11:40
2005.10.02
Структура (запись)


1-1126366765
lookin
2005-09-10 19:39
2005.10.02
Немигающая каретка: возможно ли это?


1-1126339930
Alpine
2005-09-10 12:12
2005.10.02
Как получить доступ к окну ?


1-1126078877
Vovka
2005-09-07 11:41
2005.10.02
Компонент который ынтерпретирует html теги


1-1126181305
JTAG
2005-09-08 16:08
2005.10.02
Как можно узнать открыт файл или нет?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский