Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.03 c
15-1165956112
hell
2006-12-12 23:41
2006.12.31
вирус


15-1165840218
Чапаев
2006-12-11 15:30
2006.12.31
"Достаться на орехи"


1-1163459204
Morrison
2006-11-14 02:06
2006.12.31
Кто знаком с KAZip? Не получаются элементарные вещи... :(


15-1165870136
Petr V. Abramov
2006-12-11 23:48
2006.12.31
Изучаю программирование сетей :)


2-1165476420
Xmen
2006-12-07 10:27
2006.12.31
Сброс данных из базы в TreeView




   Наверх