Главная страница
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.062 c
10-1126864340
Delphir
2005-09-16 13:52
2006.12.31
Explorer ToolBand


15-1166028114
Ученик чародея
2006-12-13 19:41
2006.12.31
DOS, Линукс, терминальное решение.


15-1165573156
Гарри Поттер
2006-12-08 13:19
2006.12.31
Кому знаком такой глюг, помогите?


15-1165008730
lookin
2006-12-02 00:32
2006.12.31
Relative path name в Delphi.


15-1165767749
Kolan
2006-12-10 19:22
2006.12.31
Забавный скроллбар