Главная страница
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.021 c
4-1168522359
Cj
2007-01-11 16:32
2007.06.24
Приостановка процесса


8-1160561120
zorgens
2006-10-11 14:05
2007.06.24
DSPack


2-1180954130
nali
2007-06-04 14:48
2007.06.24
Не рисуется иконка на кнопке в таскбаре


9-1154357882
Nikss
2006-07-31 18:58
2007.06.24
.Net Framework&amp;Tetris


2-1180524585
navinavi
2007-05-30 15:29
2007.06.24
Список имен всех запушенных приложений