![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Выборочная обработка wm_mousedown [D6, WinXP]
assa © (2007-04-23 11:12:00)Здорово всем!
Такая ситуация: программа совершает некоторые действия при событии OnMouseDown кнопки, но иногда бывает так, что обработчик этого события выполняется слишком долго, пользователь не видит реакции и нажимает еще раз на кнопку. В итоге после обработки первого нажатия происходит обработка второго нажатия, а чего бы не хотелось.
Вопрос: как лучше реализовать фильтр таких событий? Т.е. что бы сообщения wm_mousedown отфильтровывались если они поставлены в очередь когда еще происходит обработка события?
Я даже не знаю с какой стороны подойти для решения этой проблемы...
assa (2007-04-23 17:56:00) [1]
> while (PeekMessage(Msg, Handle, WM_LBUTTONDOWN, WM_LBUTTONDOWN,
> PM_REMOVE))
это то что надо!))
спасибо огромное!
clickmaker (2007-04-23 17:38:00) [2]
> запрашивает данные из БД и перерисовывает окно
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:17:00) [3]Обработчик запрашивает данные из БД и перерисовывает окно.
Я так понимаю, что вызовы обработчика события будут происходить последовательно (??) и тогда способ ЮЮ не прокатит.
GrayFace (2007-04-23 13:42:00) [4]ЮЮ, так ничего не выйдет. Надо вызывать Application.ProcessMessages внутри finally перед
<компонент>.OnMouseDown := FormMouseDown.
С таким же успехом вместо изменения обработчика можно ввести флаг работы.
ЮЮ (2007-04-23 11:38:00) [5]procedure TfrmChild.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
<компонент>.OnMouseDown := nil // теперь жать бесполезно
try
finally
<компонент>.OnMouseDown := FormMouseDown; // теперь можно жать
end;
end;
clickmaker (2007-04-23 11:17:00) [6]а что делает обработчик события?