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

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

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.12.2011, 11:27   #1
Razmir
 
Аватар для Razmir
 
Регистрация: 08.06.2011
Сообщений: 9
По умолчанию Перемещение Timage

День добрый. По форме двигаю несколько image, так же по ходу создаю их и удаляю. Как сделать, чтобы они натыкались друг на друга и не перекрывались. Спасибо
Razmir вне форума Ответить с цитированием
Старый 13.12.2011, 12:45   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,544
По умолчанию

Проверять на пересечение двигаемый со всеми остальными.
Left, Top - координаты верхнего левого угла; Width, Height - ширина и высота.
Arigato на форуме Ответить с цитированием
Старый 13.12.2011, 13:13   #3
Razmir
 
Аватар для Razmir
 
Регистрация: 08.06.2011
Сообщений: 9
По умолчанию

Да это я сообразил. Не могу понять как это организовать. Получается что то замудренное. Если сравнивать положение объекта с каждым из существующих, то на каком то этапе (когда их станет слишком много) программа начнет жутко тормозить.
Razmir вне форума Ответить с цитированием
Старый 13.12.2011, 13:19   #4
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

использовать лучше один имидж как поле а на нём отрисовывать объекты например TBitMap а ещё лучще создать массив TBitMap
SERG1980 вне форума Ответить с цитированием
Старый 13.12.2011, 13:20   #5
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,544
По умолчанию

Много - это сколько? Сделать 1000 сравнений для компьютера не проблема.
Arigato на форуме Ответить с цитированием
Старый 13.12.2011, 15:10   #6
Razmir
 
Аватар для Razmir
 
Регистрация: 08.06.2011
Сообщений: 9
По умолчанию

Понял. Халявы не будет. Ок.Тогда подскажите, накидал вот это:
Код:
procedure TForm1.Image2MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
  begin
          if move then
           begin
              (Sender as Timage).Left:=(Sender as Timage).Left+x-x0;
                if(Sender as Timage).Left<image1.Left then  (Sender as Timage).Left:=image1.Left ;
                   if (Sender as Timage).Left>image1.Left+image1.Width-(Sender as Timage).Width then
                      (Sender as Timage).Left:=image1.Left+image1.Width-(Sender as Timage).Width;




              (Sender as Timage).Top:=(Sender as Timage).Top+y-y0;
                if  (Sender as Timage).Top<image1.top then  (Sender as Timage).Top:=image1.top;
                   if (Sender as Timage).top>image1.top+image1.Height-(Sender as Timage).Height then
                      (Sender as Timage).top:=image1.top+image1.Height-(Sender as Timage).Height;
                i:=1;
           //  for i:=1 to 20 do
             begin
              if {(i<>(sender as timage).tag) and }((Sender as Timage).Left<r[i].Left+r[i].Width) and ((Sender as Timage).Left>(r[i].Left-(Sender as Timage).Width))
                   and ((sender as timage).Top>r[i].Top-(sender as timage).height) and ((sender as timage).Top<r[i].Top+r[i].Height) then
                   begin

                   (sender as timage).Left:=r[i].Left-r[i].Width; ????????????????

                   end;
             end;
не могу сообразить что делать со строкой где вопросы, либо прилипает, либо только по одной из координат работает.
И с одним объектом нормально, а когда их i тое к-во ошибка.
Razmir вне форума Ответить с цитированием
Старый 21.12.2011, 19:35   #7
antonn
Пользователь
 
Регистрация: 17.05.2011
Сообщений: 24
По умолчанию

все таки советую прислушаться к SERG1980 и сделать примерно как тут http://forum.sources.ru/index.php?sh...&#entry2001377
antonn вне форума Ответить с цитированием
Старый 21.12.2011, 22:21   #8
invizor
Пользователь
 
Аватар для invizor
 
Регистрация: 15.11.2010
Сообщений: 53
По умолчанию

Посмотрел код- естественно только по одной координате работает, потому что только left ему меняешь,
я бы так написал:
b1:=TImage(Sender).Left-r[i].Left<r[i].Width;
b2:=TImage(Sender).Top-r[i].Top<r[i].Height;

if b1 then
TImage(Sender).Left:=r[i].Left-r[i].Width;
if b2 then
TImage(Sender).Top:=r[i].Left-r[i].Width;

b1 и b2 boolean, да и проверку на внешние границы тоже стоит переделать
Герои меча и магии собственного производства http://invizor007.000webhostapp.com/...1/hi_v1_3a.rar
Личный сайт http://invizor007.000webhostapp.com/
invizor вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перемещение в БД Михаил Юрьевич Общие вопросы Delphi 3 02.10.2011 01:14
перемещение ярлыков NiCola999 Общие вопросы C/C++ 9 02.07.2010 00:27
Перемещение объектов _-Re@l-_ Общие вопросы Delphi 10 17.06.2010 12:12
Перемещение TImage LexaBeliy Общие вопросы Delphi 11 15.09.2009 03:22
Перемещение TImage Романнн Общие вопросы Delphi 1 27.10.2008 18:38