Может я чего не понял, но у меня твоя процедура не работает. Я бросил на форму несколько компонентов 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;