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

Вниз

Как остановить получение событий колеса мыши?   Найти похожие ветки 

 
Mechanic   (2006-08-22 12:53) [0]

Мой компонент унаследован от TCustomControl. если на нем крутануть колесом мыши, то он последовательно выполнит каждое событие колеса. Мне нужно прервать выполнение событий колеса если колесо уже не крутится.


 
Сергей М. ©   (2006-08-22 13:05) [1]

А откуда ты узнаешь, крутится оно или не крутится ?


 
Mechanic   (2006-08-22 13:07) [2]

Если б знал, сделал бы.


 
Сергей М. ©   (2006-08-22 13:09) [3]

А зачем их прерывать-то ?


 
PSPF2003 ©   (2006-08-22 13:11) [4]

))))


 
Mechanic   (2006-08-22 13:11) [5]

у меня это действие долго выполняется, и если не прервать последовательность событий колеса, то оно после колеса еще 5 минут выполняться будет.


 
clickmaker ©   (2006-08-22 13:13) [6]


> [5] Mechanic   (22.08.06 13:11)

попробуй ускорить действие


 
Mechanic   (2006-08-22 13:15) [7]

действие ускорить нельзя


 
Сергей М. ©   (2006-08-22 13:17) [8]


> у меня это действие долго выполняется


Ну так используй таймер !

Запускай его при первом событии, при срабатывании таймера выключай его и следом удаляй из очереди сообщений все оставшиеся сообщения WM_MOUSEWHEEL


 
Mechanic   (2006-08-22 13:36) [9]

Сергей М.

как работать с очередью сообщений? Если собщение WM_MOUSEWHEEL уже пришло вызвав мою OnMouseWheelUp, я не смогу определить обрабатывать ее или нет. Или я что-то не понял в предложенном вами алгоритме.


 
Сергей М. ©   (2006-08-22 13:48) [10]


> как работать с очередью сообщений?


в обработчике OnMouseWheelUp/Down:

MyTimer.Enabled := True;

в обработчике OnTimer:

var Msg: TMsg;
..
MyTimer.Enabled := False;
while PeekMessage(Msg, MyControl.Handle, WM_MOUSEWHEEL, WM_MOUSEWHEEL, PM_REMOVE) do;


 
Mechanic   (2006-08-22 16:10) [11]

OnTimer происходит только после всех MouseWheel. Т.е. не прокатывает.


 
Сергей М. ©   (2006-08-22 16:24) [12]

Тады в обработчике OnMouseWheelUp/Down

var Msg: TMsg;
..
if MyTimer.Enabled then
begin
 if PeekMessage(Msg, MyControl.Handle, WM_TIMER, WM_TIMER, PM_REMOVE) do
   DispatchMessage(Msg);
end else
 MyTimer.Enabled := True;


 
Mechanic   (2006-08-22 16:38) [13]

Зачем тут нужен MyTimer? Который ничего не выполняет, кроме как работу флажка.


 
Сергей М. ©   (2006-08-22 16:44) [14]


> Mechanic   (22.08.06 16:38) [13]


> Который ничего не выполняет, кроме как работу флажка


Чего-чего ? Какого такого "флажка" ?)


 
Mechanic   (2006-08-22 16:49) [15]

просмотрел WM_TIMER, WM_TIMER, сорри


 
Mechanic   (2006-08-22 17:03) [16]

Отлично! Заработало. Спасибо, Сергей!


 
GrayFace ©   (2006-08-25 18:38) [17]

Сергей М. ©   (22.08.06 16:44) [14]
Чего-чего ? Какого такого "флажка" ?)

Переменной типа Boolean.



Страницы: 1 вся ветка

Текущий архив: 2006.12.31;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.059 c
2-1165673458
Pa5ha
2006-12-09 17:10
2006.12.31
Генератор управлялки к бд


2-1165664713
Strori
2006-12-09 14:45
2006.12.31
Удаление подстроки в строке. Выборочное.


2-1165844830
Provodnick
2006-12-11 16:47
2006.12.31
Создание запроса в MS ACCESS


15-1165610085
tesseract
2006-12-08 23:34
2006.12.31
pocket PC


2-1165916904
Olleg_ator
2006-12-12 12:48
2006.12.31
Компонент TADOStoredProc