| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Для новичков > След от TImage после его перемещения |
| Автор: dimavit 3.8.2012, 09:53 |
| Компонент TImage создается динамически и размещается на компоненте PaintBox. При изменении положения TImage путем задания его новых координат (Left и Top) на месте начального положения остается его след. Как можно от него избавиться? Установка TImage.Visible:= False перед началом перемещения ничего не дает. Закрашивать не подходит т.к. PaintBox, являющийся фоном, имеет разные цвета и заранее не известно на каком из них (либо вообще на их границе) был размещен компонент TImage. |
| Автор: Alexeis 3.8.2012, 10:29 |
| Да, этот TImage не особо подходит для всяких анимаций. Он скорее годиться для размещения статических картинок. Его задача хранить в себе изображение и обновлять, по мере того как вышестоящие окна его затирают. Анимация делается следующим образом. Сначала рисуется очередной кадр на невидимом битмапе (если изображение само по себе не меняется, то этот шаг пропускаем), затем очищаем область в том месте где была старая картинка (часто стирают весь фон), затем восстанавливают очищенные области (или перерисовывают весь фон заново, если стирался весь фон), затем заранее подготовленный кадр из невидимого битмапа переноситься поверх отрисованного фона. Если будете соблюдать указанную последовательность операций, то у вас всегда получиться красивая анимация без мерцаний, лишних следов и т.д. Чтобы упростить себе жизнь, можно рисовать анимацию на любом оконном компоненте и перемещать его вместо TImage. Windows сама следит за правильностью отрисовки, единственное, что потребуется так это восстанавливать картинку по обработчику OnPaint . |
| Автор: dimavit 3.8.2012, 11:25 | ||
затем восстанавливают очищенные области - можно об этом поподробнее? Перересовывать все нереально, поскольку объектов много и каждый из них движется сам по себе (и каждый оставляет след как показано на прилагаемом рисунке). <img src="http://s2.ipicture.ru/uploads/20120803/gVid871G.jpg" border="0"> |
| Автор: dimavit 3.8.2012, 11:56 |
| Тут мне пришла в голову такая мысль - а может причина оставления следа это то, что родителем моего TImage является TPanel, а уже на TPanel лежит TPaintBox, на котором отрисован фон. По этому то фону и должен двигаться TImage. Таким образом, и TImage и TPaintBox имеют общего родителя TPanel. После перемещения я и вижу на месте TImage кусочек его родителя. А вот сделать TPaintBox родителем TImage не получается. |