Hola, como te ha indicado Neftali debes guardar los datos que obteniendo con el random, paar ello podrías crearte tu estructura y almacenarlo en un TObjectList, así cada ves que quieras ver si alguno de tus valores ya estuvieran recorres tu lista y verificas. Otra cosita nose porque estas utilizando dos for si al final le asignas a Top y Left el valor del Random, si objetivo es buscar un random en un rango entonces puedes utilizar RandomRange, mas o menos así quedaría tu codigo.
Código Delphi
[-]
TCoordenadas = class
private
Imagen : String;
X,
Y,
aWith,
aHeigth : Integer;
public
end;
...................
uses Contnrs;
...................................
Coordenadas : TCoordenadas;
Lista : TObjectList;
....................................
procedure Guardar(aImagen : TImage);
begin
With Coordenadas Do
begin
Imagen := aImagen.Name;
X := aImagen.Left;
Y := aImagen.Top;
aWith := aImagen.Width;
aHeigth := aImagen.Height;
end;
Lista.Add(Coordenadas);
end;
procedure PosicionarImagen(aImagen : TImage);
var
aTop, aLeft : Integer;
begin
aTop := RandomRange(0, 372);
aLeft := RandomRange(0, 575);
aImagen.Top := aTop;
aImagen.Left:= aLeft;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Lista.Clear; PosicionarImagen(Image1);
PosicionarImagen(Image2);
PosicionarImagen(Image3);
PosicionarImagen(Image4);
end;
lo que faltaría es recorrer la lista cada ves que encuentre un random y verificar si hay colisiones, si lo hay calcular otro random.
Saluditos