Zitat:
Dein Algorithmus shuffled nichts, das würde ja bedeuten, das er die Reihenfolge der Items in der Liste willkürlich verändert. Das scheint aber nicht die Absicht zu sein.
Doch das ist die Absicht.
Muss mir das noch mal anschauen.
Der Witz an meiner schleife ist dieser das einmal der Index und zusätzlich die gesamte Liste geändert werden soll
um eine höhere Wahrscheinlichkeit zu haben das sich die Einträge nicht widerholen.
So rufe ich sie auf.
Delphi-Quellcode:
gG.ShuffelIndex := BassPlayer.ListShuffle(LVPlayFav);
LVPlayFav.ListViewSelect(LVPlayFav.Handle, gG.ShuffelIndex);
Mein Problem ist das der 1 Eintrag zu oft aufgerufen wird.
PS:
So sollte das sein.
Delphi-Quellcode:
function TBassPlayer.ListShuffle(LView: ISkinListView): Integer;
var
Inx: Integer;
RandomInx: Integer;
RandomIndex: Integer;
ListCount: Integer;
begin
RandomIndex := 0;
result := 0;
ListCount := LView.Count(LView.Handle);
for Inx := 0 to ListCount - 1 do
begin
begin
RandomInx := Random(ListCount);
if (RandomInx <> Inx) then
begin
RandomIndex := RandomInx;
LView.SetTopItem(LView.Handle, RandomIndex)
end;
end;
if RandomIndex = LView.GetCurSel(LView.Handle) then
begin
RandomIndex := RandomIndex + 1;
LView.SetTopItem(LView.Handle, RandomIndex);
end;
result := RandomIndex;
end;
end;
Muss mal sehen ob das ausreicht.
gruss