Странно, проскакивают вызовы сообщения
От: Аноним  
Дата: 07.11.05 08:17
Оценка:
Имеем таблицу, наследника от TCustomGrid, перекрываем метод MouseMove следющим образом:

var ARow,ACol: integer;
begin
Inherited;
ARow:=GetRowByXY(X,Y);
ACol:=GetColByXY(X,Y);
if (AСol<>oldCol) or (ARow<>oldRow) then {т.е. если указатель мыши переместился на новую ячейку}
begin
{.....}
{какие-то действия}
{.....}
OldRow:=GetRowByXY(X,Y);
OldCol:=GetColByXY(X,Y);
end;
end

Проблема в следующем: Если мышу вести медленно, или с нормально скоростью, то событие срабатывает на каждой ячейки
на которую перемещается мыша, если же мышу двигать довольно быстро, то некоторые ячейки проскакивают...
Может кто сталквался с такой проблемой? Где тут засада и как с ней бороться?
Re: Странно, проскакивают вызовы сообщения
От: alive Россия  
Дата: 07.11.05 09:19
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Проблема в следующем: Если мышу вести медленно, или с нормально скоростью, то событие срабатывает на каждой ячейки

А>на которую перемещается мыша, если же мышу двигать довольно быстро, то некоторые ячейки проскакивают...
А>Может кто сталквался с такой проблемой? Где тут засада и как с ней бороться?

Засада вероятно здесь. Из MSDN :

When mouse messages are posted faster than a thread can process them, the system discards all but the most recent mouse message.

Как бороться
Keep yourself alive
Re[2]: Странно, проскакивают вызовы сообщения
От: Аноним  
Дата: 07.11.05 11:52
Оценка:
Здравствуйте, alive, Вы писали:

A>Здравствуйте, Аноним, Вы писали:


А>>Проблема в следующем: Если мышу вести медленно, или с нормально скоростью, то событие срабатывает на каждой ячейки

А>>на которую перемещается мыша, если же мышу двигать довольно быстро, то некоторые ячейки проскакивают...
А>>Может кто сталквался с такой проблемой? Где тут засада и как с ней бороться?

A>Засада вероятно здесь. Из MSDN :

A>

A>When mouse messages are posted faster than a thread can process them, the system discards all but the most recent mouse message.

A>Как бороться

Вот, млин, засада.....
Re: Странно, проскакивают вызовы сообщения
От: Softwarer http://softwarer.ru
Дата: 09.11.05 08:37
Оценка: 1 (1)
Здравствуйте, Аноним, Вы писали:

А>Проблема в следующем: Если мышу вести медленно, или с нормально скоростью, то событие срабатывает на каждой ячейки

А>на которую перемещается мыша, если же мышу двигать довольно быстро,
то некоторые ячейки проскакивают...

Проблема в том, что подобный код вообще нужно писать очень аккуратно и продуманно, поскольку существуют весьма экзотические варианты. Например:

— пользователь оставил мышку и вообще ее не трогает
— пользователь нажал Alt-Tab и переключился в другое приложение
— другое приложение выдало MessageBox
— винда сообразно своим настройкам передвинула курсор на кнопку OK
— пользователь закрыл диалог пробелом и Alt-Tab-ом снова переключился в Ваше приложение
— курсор в итоге оказался над другой ячейкой того же грида

Соответственно — такой код лучше вообще не писать. А если уж писать, тот должен работать непрошибаемо логично, давать правильный результат в самой непредсказуемой ситуации. Не знаю кого как, но меня изрядно бесят приложения с залипающими flat-кнопками, инверсными следами от bounding rectangle итп.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.