procedure TForm1.Button1Click(Sender: TObject);
var i, j, k: integer;
sPerfectos: string;
const
cLimite = 1000;
begin
i := 1;
sPerfectos := '';
repeat
j := 0;
k := 1;
repeat
if (i mod k = 0) and (i <> k) then
j := j + k;
inc(k);
until k > trunc(i/2);
if j = i then
sPerfectos := sPerfectos + IntToStr(i) + ', ';
inc(i);
until i = cLimite + 1;
ShowMessage(sPerfectos);
end;