Вниз
Скачать: CL | DM;

Еще один вопрос   Найти похожие ветки 

 
SerJaNT ©   (2007-04-04 05:40) [0]

На событие Image OnMouseMove и обновляю положение другого Image вот так:

image3.Left:=x - (image3.width div 2);
image3.top:=y+25;


Вопрос такой: когда я перемещаю курсор, то image3 просто перемещается за курсором, а как сделать чтобы он плавно перемещался так сказать с эффектом "оставания", т.е. если я резко дерну мышку, то image3 плавно проследует за ней?


 
KSergey ©   (2007-04-04 06:08) [1]

Я вижу, например, 2 варианта
Какой будет лучше работать - не знаю.

а) таймер. Собственно перемещение делаем в собитии таймера. В OnMouseMove лишь активизируем таймер, разумеется.
б) в OnMouseMove кидаем себе некое кастомное сообщение, в его обработчике двигаем картинку и, если новое положение картинки не достигло требуемых координат - кидаем снова себе это же кастомное сообщение. Разумеется - через PostMesage, т.е. в очередь. Возможно. придется добавить небольшую задержку (таймером? может быть, но только не Sleep или пустой цикл!!), чтобы не получалось, что перемещение происходит слишком быстро, да еще с разной скоростью в зависимости от производительности.

Разумеется, в обоих случаях картинку двигаем не в позицию координат мыши, а на кукоторую величину относительно предыдущего положения. Короче тут подумать немного надо как лучше координаты пересчитывать.

Кроме того, возможно (для красоты эффекта) есть смысл сделать даже так: в основном потоке - отрисовка картинки и ее "возбуждение события2 по ее перемещения (отриковке в новых координатах), а в дополнительном - таймер, который бы вне зависимости от всего прочего отсчитывал кол-во шагов, на которое надо переместить картинку. В противном случае на медленных машинах рискуем получить эффект, когда картинка будет двигаться медленее из-за того, что каждый раз будет сдвигатья лишь на один шаг, в то время, как время прошло уже порядочно и надо бы двинуться на два-три и т.д. шага, пусть это и будет приводить к некоторым "рывкам" - зато скорость движения будет постоянна (при большом времени отрисовки или прочих расходов на полезную работу приложения).



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.028 c
3-1171288160
Виталик 2007
2007-02-12 16:49
2007.04.29
Постейший пример работы с IB. Как правильно?


2-1176131687
Ezorcist
2007-04-09 19:14
2007.04.29
Приоритет потока TThread и самой программы.


15-1175594020
ocean
2007-04-03 13:53
2007.04.29
Как установить XP вместе с Vista?


2-1176197360
npu3pak
2007-04-10 13:29
2007.04.29
Как райионально добавлять данные в базу Access?


15-1175480795
Slider007
2007-04-02 06:26
2007.04.29
С днем рождения ! 31 марта




   Наверх