Форум: "Основная";
Текущий архив: 2007.06.24;
Скачать: [xml.tar.bz2];
ВнизВыборочная обработка 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.047 c