Показать сообщение отдельно
  #8  
Старый 07.06.2010, 10:43
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию

попробуй так:
Код:
procedure TForm1.vPanel(comp:Tcomponent);
begin
  if (comp is TPanel) then begin
   (comp as TPanel).Visible:=true;
   if (comp as Tpanel).Parent is Tpanel then vPanel((comp as Tpanel).Parent);
   end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i,k: integer;                   //Переменная для цикла i
  ArPanel: array of TControl;   //Динамический массив TControl
  Vis: boolean;                 //Переменная, показывающая скрытость или видимость
  r: integer;                   //Переменная, содержащая рандомное значение
begin

  //Цикл для нахождения и помещения в дин. массив TControl-ов
  for i := 0 to Form1.ComponentCount -1 do
  if Form1.components[i] is TPanel then
    begin
      SetLength(ArPanel, High(ArPanel) + 2);      //Установка размера массива большего на 1
      ArPanel[High(ArPanel)] := (Form1.components[i] as Tcontrol);
    end;

  Randomize;

  //Фрагмент нужен для того, чтобы не показывать панел второй раз
  k:=0;
  Repeat
    r := Random(High(ArPanel) - Low(ArPanel) +1);
    Vis := ArPanel[r].Visible;
    vpanel(ArPanel[r]);//.Show;
  k:=k+1;
  Until (not Vis )or (k=100);

end;