| 
   
    | ...generate random numbers with no duplicate values? |   
    | Autor: 
      Thomas Stutz |  | [ Print tip 
] |  |  |  
 
 
procedure Shuffle(var aArray; aItemCount: Integer; aItemSize: Integer);{ after Julian M Bucknall }
 var
 Inx: Integer;
 RandInx: Integer;
 SwapItem: PByteArray;
 A: TByteArray absolute aArray;
 begin
 if (aItemCount > 1) then
 begin
 GetMem(SwapItem, aItemSize);
 try
 for Inx := 0 to (aItemCount - 2) do
 begin
 RandInx := Random(aItemCount - Inx);
 Move(A[Inx * aItemSize], SwapItem^, aItemSize);
 Move(A[RandInx * aItemSize], A[Inx * aItemSize], aItemSize);
 Move(SwapItem^, A[RandInx * aItemSize], aItemSize);
 end;
 finally
 FreeMem(SwapItem, aItemSize);
 end;
 end;
 end;
 
 procedure TForm1.Button1Click(Sender: TObject);
 var
 a: array[1..10] of Integer;
 i: Shortint;
 begin
 Randomize;
 for i := Low(a) to High(a) do a[i] := i;
 Shuffle(a, High(a), SizeOf(Integer));
 for i := 1 to High(a) - 1 do
 ListBox1.Items.Add(IntToStr(a[i]));
 end;
 
 
 
   |