Mélanger / mixer / Shuffle un Tlistbox ou array
salut
je cherchais à très bien mélanger un Tlistbox ou un array (ils contiendront des nombres de 1 à 60)
j'ai cherché sur le forum, et les morceaux de code trouvés ne fonctionnent pas correctement ou alors le mélange n'est pas efficace
sur delphi about ou je trouve toujours tout, j'ai trouvé un code qui me semblait intéressant :
http://delphi.about.com/cs/adptips20...ltip1003_4.htm
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
|
Place a TButton (Button1) and a TListBox (ListBox1) and try:
~~~~~~~~~~~~~~~~~~~~~~~~~
procedure Shuffle(
var aArray;
aItemCount: Integer;
aItemSize: Integer) ;
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..54] of Integer;
i: Shortint;
begin
Randomize;
for i := Low(a) to High(a) do a := i;
Shuffle(a, High(a), SizeOf(Integer)) ;
ListBox1.Clear;
for i := 1 to High(a) - 1 do
ListBox1.Items.Add(IntToStr(a)) ;
end;
~~~~~~~~~~~~~~~~~~~~~~~~~ |
mais ça ne fonctionne pas ! :(
j'ai les messages d'erreur :
[Erreur] Unit1.pas(66): Types incompatibles : 'Array' et 'Shortint'
[Erreur] Unit1.pas(70): Aucune version surchargée de 'IntToStr' ne peut être appelée avec ces arguments
donc voilà j'aimerais votre aide pou faire fonctionner ce code ou alors si vous avez une autre solution? il me faut quelque chose qui mélange bien ^^
merci ;)