Главная страница
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.023 c
4-1168770920
SysProgram
2007-01-14 13:35
2007.06.24
Определение параметров пользователя


15-1179983146
Riply
2007-05-24 09:05
2007.06.24
Драйвер с именем " " (9 пробелов).


2-1180439008
Sasha Sanches
2007-05-29 15:43
2007.06.24
Аппраксимация...


2-1180962201
>>DEATH<<
2007-06-04 17:03
2007.06.24
html теги


15-1180269906
DillerXX
2007-05-27 16:45
2007.06.24
Курсовой