Дуже проста задача, якщо ви почнете використовувати TList. Вам треба сформувати TList, (TStrings пiдiйде), в якому кожен елемент буде кожною лiтерою з тексту. А потiм ви просто добавляете у вихiдний текст по однiй лiтерi, рандомно, з початкового перелiку i кожен раз видалаете те, що вже вставили. Таким чином, TList.Count буде кожен раз зменшуватись, до нуля.
var
  src : string;
  srcs: TStrings;
  out : string;
  i:integer;
begin
  srcs := TStringList.Create;
  for i:=1 to length(src) do // copy data from array to List
    srcs.Add(src[i]);
  out:='';
  while (srcs.Count>0) do
  begin
     i := random(srcs.Count-1); // Choose the next element from the rest
     out := out + srcs[i];
     srcs.Delete(i); // remove added element from the source List.
  end;
  srcs.Free;
end;
(писав без редактора, тому, вибачаюсь, якщо е якiсь помилки).