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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.08.2010, 16:07   #11
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
abs лишний.
Не лишний а запасной
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 31.08.2010, 21:11   #12
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,547
По умолчанию

А все равно он ничего в итоге не делает там, только формула более громоздкая и медленная.
Arigato вне форума Ответить с цитированием
Старый 03.09.2010, 15:45   #13
dmitriegorovih
Ещё не
Форумчанин
 
Аватар для dmitriegorovih
 
Регистрация: 04.01.2010
Сообщений: 517
По умолчанию

Stilet Я извеняюсь за столь долгую задержку просто школа щас конечно не до этого, и всё таки если вас не затруднит как сделать прилипание именно краёв image(a)
Воображение важнее, чем знания. (Albert Einstein)
dmitriegorovih вне форума Ответить с цитированием
Старый 03.09.2010, 16:12   #14
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
как сделать прилипание именно краёв image(a)
Давай так. Я поправлю в своем примере обработчик перемещения так чтоб картинки клеились к друг другу сбоку:
Код:
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var cx2,cx,pt2:TPoint;i:integer; r1,r2:double;
begin
  if (pt.X>0)and(pt.Y>0) then begin
    pt2:=TImage(Sender).ClientToScreen(Point(x,y));
    TImage(Sender).Left:=TImage(Sender).Left+(pt2.X-pt.X);
    TImage(Sender).Top:=TImage(Sender).Top+(pt2.y-pt.y);
    pt:=pt2;
    cx.X:=TImage(Sender).Left+TImage(Sender).Width div 2;
    cx.y:=TImage(Sender).Top+TImage(Sender).Height div 2;
     r1:=sqrt(sqr(TImage(Sender).Width)+sqrt(TImage(Sender).Height));
    for i := 0 to ControlCount - 1 do begin
     if (Controls[i] is TImage)and(Controls[i]<>sender) then begin
       with TImage(Controls[i]) do begin
        cx2.X:=Left+Width div 2;
        cx2.y:=Top+Height div 2;
        r2:=sqrt(sqr(Width)+sqrt(Height));
        if sqrt(sqr(cx.X-cx2.X)+sqr(cx.y-cx2.y))<((r2+r1)/2+20) then begin
        //******************************************
           if (cx.X>cx2.X) then  begin
            TImage(Sender).Left:=Left+Width;
            TImage(Sender).Top:=top;
           end;
           if (cx.X<cx2.X) then  begin
            TImage(Sender).Left:=Left-Width;
            TImage(Sender).Top:=top;
           end;
        //******************************************
        end;
      end;
     end;
    end;
  end;
end;
А поскольку ты школьник, тебе нужно учится - домашнее задание, сделать прилипание сверху-снизу.

И еще. Есть небольшой побочный эффект - прилипшие картинки нельзя отлепить
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.09.2010, 17:38   #15
dmitriegorovih
Ещё не
Форумчанин
 
Аватар для dmitriegorovih
 
Регистрация: 04.01.2010
Сообщений: 517
По умолчанию

Спасибо буду на досуге разбирать
Воображение важнее, чем знания. (Albert Einstein)
dmitriegorovih вне форума Ответить с цитированием
Старый 06.09.2010, 14:28   #16
dmitriegorovih
Ещё не
Форумчанин
 
Аватар для dmitriegorovih
 
Регистрация: 04.01.2010
Сообщений: 517
По умолчанию

Всё! Ура! работает!
Stilet Спасибо что направили в нужное русло
Код:
...

var
pt,po:TPoint;
  b:boolean;

...

procedure TForm1.Image3MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
po.X:=x;
po.Y:=y;
b:=true;
end;

procedure TForm1.Image3MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
  var
  i:integer;
begin
if b=true then begin
Timage(sender).Left:=Timage(sender).Left+(x-po.X);
Timage(sender).Top:=Timage(sender).Top+(y-po.y);
for i := 0 to ControlCount - 1 do begin
     if (Controls[i] is TImage)and(Controls[i]<>sender) then begin
     if Timage(sender).Top+Timage(sender).Height>=Timage(Controls[i]).Top-15 then begin
     if Timage(sender).Top<=Timage(Controls[i]).Top+Timage(Controls[i]).Height+15 then begin
    if Timage(sender).Left<=Timage(Controls[i]).Left+Timage(Controls[i]).Width+15 then begin
     if Timage(sender).Left>=Timage(Controls[i]).Left-Timage(Controls[i]).Width then begin
     if Timage(sender).Top>=Timage(Controls[i]).Top+Timage(Controls[i]).Height-15 then begin
     Timage(sender).Top:=Timage(Controls[i]).Top+Timage(Controls[i]).Height;
     if Timage(sender).Left>=Timage(Controls[i]).Left-10 then begin
     if Timage(sender).Left<=Timage(Controls[i]).Left+10 then begin
     Timage(sender).Left:=Timage(Controls[i]).Left;
     end;
     end;
     end;
    if Timage(sender).Top+Timage(sender).Height<=Timage(Controls[i]).Top+15 then begin
     Timage(sender).Top:=Timage(Controls[i]).Top-Timage(Controls[i]).Height;
     if Timage(sender).Left>=Timage(Controls[i]).Left-10 then begin
     if Timage(sender).Left<=Timage(Controls[i]).Left+10 then begin
     Timage(sender).Left:=Timage(Controls[i]).Left;
     end;
     end;
     end;
     end;
      if Timage(sender).Left+Timage(sender).Width>=Timage(Controls[i]).Left-15 then begin
      if Timage(sender).Left+Timage(sender).Width<=Timage(Controls[i]).Left+15 then begin
      Timage(sender).Left:=Timage(Controls[i]).Left-Timage(Controls[i]).Width;
      if Timage(sender).Top>=Timage(Controls[i]).Top-10 then begin
     if Timage(sender).Top<=Timage(Controls[i]).Top+10 then begin
     Timage(sender).Top:=Timage(Controls[i]).Top;
     end;
     end;
      end;
      end;
    if Timage(sender).Left>=Timage(Controls[i]).Left+Timage(Controls[i]).Width-15 then begin
     Timage(sender).Left:=Timage(Controls[i]).Left+Timage(Controls[i]).Width;
     if Timage(sender).Top>=Timage(Controls[i]).Top-10 then begin
     if Timage(sender).Top<=Timage(Controls[i]).Top+10 then begin
     Timage(sender).Top:=Timage(Controls[i]).Top;
     end;
     end;
     end;
     end;
     end;
     end;
     end;
     end;
end;
end;

procedure TForm1.Image3MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
b:=false;
end;
А с домашним я справился?

Для модераторов: Пока не редактируйте моё сообщение может кто следил за моей теме и им интересна развязка как только тема упадёт в рейтинге можете от редактировать
Воображение важнее, чем знания. (Albert Einstein)
dmitriegorovih вне форума Ответить с цитированием
Старый 06.09.2010, 15:12   #17
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
А с домашним я справился?
А на это тебе ответит компилятор )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рисуем обьекты, тоесть я этого не могу((( prouser Общие вопросы C/C++ 2 28.04.2010 10:26
GroupBox обьекты над ним KoBRaAndrey Общие вопросы Delphi 5 30.10.2009 12:43
Обьекты при компиляции prod87 Общие вопросы Delphi 4 28.10.2009 00:37
липкие окна NieL Общие вопросы Delphi 6 02.02.2009 14:42
Как сделать липкие окошки??? lionman Общие вопросы Delphi 1 07.11.2008 20:53