Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.06.24;
Скачать: CL | DM;

Вниз

Выборочная обработка wm_mousedown   Найти похожие ветки 

 
assa   (2007-04-23 11:12) [0]

Здорово всем!

Такая ситуация: программа совершает некоторые действия при событии OnMouseDown кнопки, но иногда бывает так, что обработчик этого события выполняется слишком долго, пользователь не видит реакции и нажимает еще раз на кнопку. В итоге после обработки первого нажатия происходит обработка второго нажатия, а чего бы не хотелось.

Вопрос: как лучше реализовать фильтр таких событий? Т.е. что бы сообщения wm_mousedown  отфильтровывались если они поставлены в очередь когда еще происходит обработка события?

Я даже не знаю с какой стороны подойти для решения этой проблемы...


 
clickmaker ©   (2007-04-23 11:17) [1]

а что делает обработчик события?


 
ЮЮ ©   (2007-04-23 11:38) [2]

procedure TfrmChild.FormMouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
 <компонент>.OnMouseDown := nil // теперь жать бесполезно
 try

 finally
   <компонент>.OnMouseDown := FormMouseDown; // теперь можно жать  
 end;
end;


 
GrayFace ©   (2007-04-23 13:42) [3]

ЮЮ, так ничего не выйдет. Надо вызывать Application.ProcessMessages внутри finally перед <компонент>.OnMouseDown := FormMouseDown.
С таким же успехом вместо изменения обработчика можно ввести флаг работы.


 
assa   (2007-04-23 17:17) [4]

Обработчик запрашивает данные из БД и перерисовывает окно.

Я так понимаю, что вызовы обработчика события будут происходить последовательно (??) и тогда способ ЮЮ не прокатит.


 
clickmaker ©   (2007-04-23 17:38) [5]


> запрашивает данные из БД и перерисовывает окно

while() do begin
 запрашиваем
 перерисовываем
 while (PeekMessage(Msg, Handle, WM_LBUTTONDOWN, WM_LBUTTONDOWN, PM_REMOVE))
  ;
end

WM_LBUTTONDOWN, WM_LBUTTONDOWN можно заменить на WM_MOUSEFIRST - WM_MOUSELAST, чтобы подавить любые телодвижения


 
assa   (2007-04-23 17:56) [6]


> while (PeekMessage(Msg, Handle, WM_LBUTTONDOWN, WM_LBUTTONDOWN,
>  PM_REMOVE))


это то что надо!))

спасибо огромное!



Страницы: 1 вся ветка

Текущий архив: 2007.06.24;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.018 c
2-1180626487
FIL-23
2007-05-31 19:48
2007.06.24
округление


15-1180405300
Slider007
2007-05-29 06:21
2007.06.24
С днем рождения ! 29 мая


8-1160066944
Tab
2006-10-05 20:49
2007.06.24
Рисование на Image с использованием GDI+


8-1160656110
zorik
2006-10-12 16:28
2007.06.24
Как нарисовать кривую Безье (или любую другую)?


15-1179975610
Sergey Masloff
2007-05-24 07:00
2007.06.24
Посоветуйте кофигурацию компьютера