![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как остановить получение событий колеса мыши? [D7, WinXP]
Mechanic © (2006-08-22 12:53:00)Мой компонент унаследован от TCustomControl. если на нем крутануть колесом мыши, то он последовательно выполнит каждое событие колеса. Мне нужно прервать выполнение событий колеса если колесо уже не крутится.
GrayFace (2006-08-25 18:38:00) [1]Сергей М. © (22.08.06 16:44) [14]
Чего-чего ? Какого такого "флажка" ?)
Переменной типа Boolean.
Mechanic (2006-08-22 17:03:00) [2]Отлично! Заработало. Спасибо, Сергей!
Mechanic (2006-08-22 16:49:00) [3]просмотрел WM_TIMER, WM_TIMER, сорри
Сергей М. (2006-08-22 16:44:00) [4]
> Mechanic (22.08.06 16:38) [13]
> Который ничего не выполняет, кроме как работу флажка
Чего-чего ? Какого такого "флажка" ?)
Mechanic (2006-08-22 16:38:00) [5]Зачем тут нужен MyTimer? Который ничего не выполняет, кроме как работу флажка.
Сергей М. (2006-08-22 16:24:00) [6]Тады в обработчике 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:10:00) [7]OnTimer происходит только после всех MouseWheel. Т.е. не прокатывает.
Сергей М. (2006-08-22 13:48:00) [8]
> как работать с очередью сообщений?
в обработчике 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 13:36:00) [9]Сергей М.
как работать с очередью сообщений? Если собщение WM_MOUSEWHEEL уже пришло вызвав мою OnMouseWheelUp, я не смогу определить обрабатывать ее или нет. Или я что-то не понял в предложенном вами алгоритме.
Сергей М. (2006-08-22 13:17:00) [10]
> у меня это действие долго выполняется
Ну так используй таймер !
Запускай его при первом событии, при срабатывании таймера выключай его и следом удаляй из очереди сообщений все оставшиеся сообщения WM_MOUSEWHEEL
Mechanic (2006-08-22 13:15:00) [11]действие ускорить нельзя
clickmaker (2006-08-22 13:13:00) [12]
> [5] Mechanic (22.08.06 13:11)
попробуй ускорить действие
Mechanic (2006-08-22 13:11:00) [13]у меня это действие долго выполняется, и если не прервать последовательность событий колеса, то оно после колеса еще 5 минут выполняться будет.
PSPF2003 (2006-08-22 13:11:00) [14]))))
Сергей М. (2006-08-22 13:09:00) [15]А зачем их прерывать-то ?
Mechanic (2006-08-22 13:07:00) [16]Если б знал, сделал бы.
Сергей М. (2006-08-22 13:05:00) [17]А откуда ты узнаешь, крутится оно или не крутится ?