Главная страница
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.48 MB
Время: 0.013 c
15-1180464954
Иксик
2007-05-29 22:55
2007.06.24
.NET 2.0 web.config


15-1180100113
oldman
2007-05-25 17:35
2007.06.24
Кстати, сегодня День Освобождения Африки....


15-1180280239
No_Dead
2007-05-27 19:37
2007.06.24
То же литература понадобилась, нужен совет


8-1160133927
Korneley
2006-10-06 15:25
2007.06.24
Запись с одного источника в несколько звуковых потоков


2-1180530707
Ezorcist
2007-05-30 17:11
2007.06.24
Удаление из Tlist