Вниз
Скачать: 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.027 c
2-1165763056
__Алексей
2006-12-10 18:04
2006.12.31
Корректная работа с записями, содержащими string.


3-1161006018
Игорь ЖАКО
2006-10-16 17:40
2006.12.31
Поле для статуса записи


15-1165684351
Vovan#2
2006-12-09 20:12
2006.12.31
Делфи продолжает глючить.


15-1165958934
Alexander S
2006-12-13 00:28
2006.12.31
Поиск программистов для совместной работы над проектом


3-1161369035
_Ламер_
2006-10-20 22:30
2006.12.31
Поставил 2.0 после 1.5. Пароль как ветром сдуло.




   Наверх