Показать сообщение отдельно
  #4  
Старый 15.07.2013, 03:05
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от Alegun
Строку
Код:
 upr:= ListBox1.Items[k];
тоже перенести вверх надо

Можно проще и "железобетонней" с помощью промежуточного списка строк. Сначала копируешь все в промежуточный список, потом, пока в нем хоть один элемент есть, выбираешь случайный, добавляешь в строку и удаляешь из пром. списка:
Код:
function GetRandomStrings(ListBox : TListBox) : String;
var
  Idx : Integer;
  Buf : TStringList;
begin
  Randomize; // Init random
  Result := '';
  Buf := TStringList.Create;
  Try
    Buf.Assign(ListBox.Items);
    While Buf.Count > 1 Do
      Begin
        Idx := Random(Buf.Count); // Get random number 0..Count-1
        Result := Result + Buf[Idx] + ' '; // Add this item to the result
        Buf.Delete(Idx); // Remove "used" item
      End;
    Result := Result := Buf[0]; // Last one
  Finally
    Buf.Free;
  End;
end;
Ответить с цитированием