Главная страница
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.055 c
3-1161331615
vvrz
2006-10-20 12:06
2006.12.31
вызов хранимой процедуры MS SQL


2-1166105483
Dfe
2006-12-14 17:11
2006.12.31
Int64


4-1156150573
Alita
2006-08-21 12:56
2006.12.31
Перенаправить сообщение


2-1166024363
Ice
2006-12-13 18:39
2006.12.31
размер фильма в tmediaplayer


9-1140806407
Fenix
2006-02-24 21:40
2006.12.31
Ищу компоненты GLScene.