Delphi随机生成不重复的数

procedure TForm1.Button1Click(Sender: TObject);
var
  b: array of integer;
  num: Integer;        //随机数的个数
  i, temp: integer;
begin
  num := 10;
  SetLength(b,num);
  for i := 1 to num DO
    b[i] := i;
  ListBox1.Clear;
  for i := 1 to num do
  begin
    temp := Random(num - i + 1) + 1;
    ListBox1.Items.Add(IntToStr(b[temp]));
    b[temp] := b[num - i + 1];
  end;
end;