Значится так.
Выбрасывай свой код нафиг, т.к. у тебя там несколько проблем, которые так просто не решишь. Тебе надо показать ВСЕ панели случайным образом. Так?
Код:
procedure TForm1.ShowPanels(APanels : Array Of TPanel);
var
I, Idx : Integer;
begin
For I := Low(APanels) To High(APanels) Do
Begin
Idx := Random(Length(APanels));
While APanels[Idx].Visible Do
Begin
Inc(AIdx);
If Idx = High(APanels)+1 Then AIdx := Low(APanels);
End;
APanels[Idx].Visible := True;
End;
end;
Что делает код.
Он выполняет цикл столько раз, скольно у тебя панелей.
Внутри каждой итерации он генерит случайный индекс панели в их, панелей, массиве. Далее, если панель уже видима, то он циклически сдвигает этот индекс на 1, пока не найдет первую невидимую панель. Тогда он делает ее видимой и переходит к следующей итерации внешнего цикла.
Ну а массив панелей ты и так умеешь собирать. Не вставлял этот код для простоты понимания.