Главная страница
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.02 c
15-1179855437
Cerberus
2007-05-22 21:37
2007.06.24
Firewall


2-1180688198
Alex7
2007-06-01 12:56
2007.06.24
Message при компиляции: Unit FileCtrl is specific to a platform


2-1180949897
TStas
2007-06-04 13:38
2007.06.24
Почему у TObject а constructor static, а destructor - dynamic?


15-1180348932
Думкин
2007-05-28 14:42
2007.06.24
CodeGear Новосибирск


11-1163643952
КВАНТ
2006-11-16 05:25
2007.06.24
Циклом читать и писать настройки из/в файл