Показать сообщение отдельно
  #2  
Старый 16.11.2006, 22:11
Аватар для Decoding
Decoding Decoding вне форума
Местный
 
Регистрация: 03.06.2006
Адрес: Почту найдете на моем сайте
Сообщения: 576
Версия Delphi: D10.2
Репутация: 214
По умолчанию

Может я чего не понял, но у меня твоя процедура не работает. Я бросил на форму несколько компонентов Image, причем Image1 пересекается с несколькими другими. Вызываю Collision( Image1 ), и получаю 'None'. Что я делаю не так?

В свою очередь предлагаю такой вариант (если я конечно правильно понял твою мысль):
Код:
function TForm1.Collision(Image: TImage): string;
var
  i, j, k: integer;
  _left, _top, _w, _h: integer;
  f: boolean;
begin
   Result := '';
   for i := 0 to ComponentCount-1 do
   begin
      if ( Components[i] is TImage ) and ( Components[i].Name <> Image.Name ) then
      begin
         _left := ( Components[i] as TImage ).Left;
         _top := ( Components[i] as TImage ).Top;
         _w := _left + ( Components[i] as TImage ).Width;
         _h := _top + ( Components[i] as TImage ).Height;
         f := false;
         for j := _left to _w do
         begin
            if f then Break;
            for k := _top to _h do
               if PtInRect( Image.BoundsRect, Point( j, k ) ) then
               begin
                  Result := Result + Components[i].Name + #13;
                  f := true;
                  Break;
               end;
         end;
      end;
   end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
   ShowMessage( Collision( Image1 ) );
end;
Ответить с цитированием