Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.08.2012, 09:38   #1
dimavit
Пользователь
 
Регистрация: 04.07.2010
Сообщений: 28
По умолчанию След после перемещения TImage

Компонент TImage создается динамически и размещается на компоненте PaintBox. При изменении положения TImage путем задания его новых координат (Left и Top) на месте начального положения остается его след. Как можно от него избавиться? Установка TImage.Visible:= False перед началом перемещения ничего не дает. Закрашивать не подходит т.к. PaintBox, являющийся фоном, имеет разные цвета и заранее не известно на каком из них (либо вообще на их границе) был размещен компонент TImage.
dimavit вне форума Ответить с цитированием
Старый 03.08.2012, 11:26   #2
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,762
По умолчанию

Используй Form1.Repaint;
FaTaL вне форума Ответить с цитированием
Старый 03.08.2012, 12:59   #3
dimavit
Пользователь
 
Регистрация: 04.07.2010
Сообщений: 28
По умолчанию

Тут мне пришла в голову такая мысль - а может причина оставления следа это то, что родителем моего TImage является TPanel, а уже на TPanel лежит TPaintBox, на котором отрисован фон. По этому то фону и должен двигаться TImage. Таким образом, и TImage и TPaintBox имеют общего родителя TPanel. После перемещения я и вижу на месте TImage кусочек его родителя. А вот сделать TPaintBox родителем TImage не получается.
dimavit вне форума Ответить с цитированием
Старый 03.08.2012, 14:07   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

между прочим TImage не может быть поверх TPaintBox.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 03.08.2012, 16:37   #5
dimavit
Пользователь
 
Регистрация: 04.07.2010
Сообщений: 28
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
между прочим TImage не может быть поверх TPaintBox.
Ну вот и я о том же. А как правильно поступить в таком случае? Задача такая - точка размером 6х6 пикселов перемещается по TPaintBox на которой начерчены круги? Начинал с того, что точку тоже отрисовывал, но при перемещении "дырка" от ее начального положения все равно оставалась. Решил использовать TImage, поскольку рассчитывал, что изменяя его Left и Тор смогу двигать точку как захочу. Но результат тот же - след остается. Есть мысль поступить так - скопировать участок фона, на котором будет располагаться точка. Поместить на него точку. При перемещении заткнуть полученную "дырку" скопированным участком. Но не слишком ли это сложно и долго? Нет ли более простого пути. Задача усложняется тем, что точек может быть много и каждая перемещается. Эскиз проблемы представлен на прилагаемом рисунке.
Изображения
Тип файла: jpg TImage.jpg (22.1 Кб, 29 просмотров)
dimavit вне форума Ответить с цитированием
Старый 03.08.2012, 16:57   #6
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

При каждом премещении, необходимо перерисовывать канву.
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.

Последний раз редактировалось chertovich; 03.08.2012 в 17:03.
chertovich вне форума Ответить с цитированием
Старый 03.08.2012, 16:59   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Почему, может. Хоть и TPainBox не может содержать других элементов управления.
TImage не оконный компонент,и не может быть выше оконного(так как рисуется строго на поверхности родителя, не имея собственной).
или TPaintBox тоже не оконный?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 03.08.2012, 17:07   #8
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

TPainBox тоже не оконный, он наследник, как и TImage, класса TGraphicControl
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
chertovich вне форума Ответить с цитированием
Старый 03.08.2012, 17:16   #9
dimavit
Пользователь
 
Регистрация: 04.07.2010
Сообщений: 28
По умолчанию

Цитата:
Сообщение от chertovich Посмотреть сообщение
При каждом премещении, необходимо перерисовывать канву.
Но тогда все-таки быстрее будет заткнуть дырку сохраненным ранее участком канвы? Тем более, что перерисовывать все невозможно по той причине, что таких точек много и каждая живет своей жизнью.
dimavit вне форума Ответить с цитированием
Старый 03.08.2012, 17:18   #10
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

Цитата:
Сообщение от dimavit Посмотреть сообщение
Но тогда все-таки быстрее будет заткнуть дырку сохраненным ранее участком канвы? Тем более, что перерисовывать все невозможно по той причине, что таких точек много и каждая живет своей жизнью.
Включите двойную буферизацию компонента (DoubleBuffered := True), на котором лежит ваш TPaintBox, и все будет быстро и красиво перерисовываться, проверено. Только для вызова перерисовки, вызывайте метод PaintBox.Repaint (Refresh), а не на прямую код.
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.

Последний раз редактировалось chertovich; 03.08.2012 в 17:23.
chertovich вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
След массива. Karm29 Microsoft Office Excel 3 30.07.2010 19:11
След матрицы NauDS Помощь студентам 5 11.03.2009 15:06
След матрицы r00tus Помощь студентам 2 25.02.2009 14:43
TImage-после image1.picture.bitmap.width и .height исчезает картинка Саня Компоненты Delphi 4 03.08.2007 07:55