Показать сообщение отдельно
  #1  
Старый 01.09.2011, 18:16
Snake22 Snake22 вне форума
Активный
 
Регистрация: 20.02.2011
Сообщения: 374
Репутация: 744
По умолчанию перемещение image'в по форме не так работает

помогите плз,на форме есть несколько имейджев (в массиве),при зажатии мышки на одной из картинке, её можно перемещать,но если при перемещени она попадёт на "территорию" другой картинки,то они должны поменяться местами.
У меня какаято фигня получается.картинка на которую заехали перемещаетс нормально на новое место,а та которую перемещаем исчезает.хотя вроде судя по её новым координатам она стоит на месте предидущей картинки.
Может кто посмотрит? мне кажется я чтото намудрил в части где проверяется заехала ли перемещаемая картинка на другую,такое чувство както подругому проверять надо.
Код:
procedure TForm1.ImsMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var i,x2,y2:integer;
begin
if move then 
  begin
    Ims[mm].left:= Ims[mm].Left+x-x0;
     Ims[mm].Top:= Ims[mm].Top+y-y0;
    for i:=0 to Length(Ims)-1 do
    {mm-номер в массиве выделенной картинки} //если картинка поподает на территорию другой картинки то меняем их местами
    if (i<>mm) and (  Ims[mm].left+50>=Ims[i].Left)and ( Ims[mm].left<=Ims[i].Left+50) //50 ширина картинки
       and ( Ims[mm].top+50>=Ims[i].top)and ( Ims[mm].top<=Ims[i].top+50)  //и высота
     then
       begin
        move:=false;//останавливаем перемещение
        x2:= ims[i].top;//запоминаем прежние координаты
        y2:= ims[i].Left;
        ims[i].top:=x1;//глобальные переменные в которых хранятся начальные коорд.перемещаемой картинки
        ims[i].left:=y1;
        //x1:=x2;
        //y1:=y2;
        Ims[mm].left:=x2;//применяем прежние коорд. к нашему имейджу
        Ims[mm].Top:=y2;
        break;//завершаем цикл
        scrollbox1.refresh;
       end
end;
end;
Вложения
Тип файла: rar MoveObject.rar (44.1 Кбайт, 1 просмотров)
Ответить с цитированием