Показать сообщение отдельно
  #7  
Старый 24.03.2014, 02:05
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Gudzik11
спасибо left работает на счёт пересчета всех панелей
думаю нужно вести какой то учёт панелей к примеру LIstBox а при добавлении панели нужно перебрать имеющиеся и разделить всё вот тут и загвоздка

Код:
 for i:=0 to Panel1.ControlCount-1 do
  if (Panel1.Controls[i] is TPanel) then
  begin

  end;
Здесь довольно просто.
Для начала делаешь массив Pages динамическим и глобальным (или ещё лучше полем формы TForm1):
Код:
var
  Form1: TForm1;
  Pages: array of TPanel;
Потом на событие OnResize панели Panel1 (т.е. той, на которой будут располагаться другие панели) делаешь примерно такой обработчик события:
Код:
procedure TForm1.Panel1Resize(Sender: TObject);
const
  Pad = 2;
var
  i: Integer;
begin
  for i := Low(Pages) to High(Pages) do
  begin
    Pages[i].Left := (Panel1.Width - Pad) * i div Length(Pages) + Pad;
    Pages[i].Top := Pad;
    Pages[i].Height := Panel1.Height - Pad * 2;
    Pages[i].Width := (Panel1.Width - Pad) * (i + 1) div Length(Pages) - Pages[i].Left;
  end;
end;
А обработчик кнопки добавления новой панельки будет выглядеть примерно так:
Код:
procedure TForm1.SpeedButton3Click(Sender: TObject);
var
  pn: TPanel;
begin
  pn := TPanel.Create(Self);
  pn.Parent := Panel1;
  pn.Caption := 'Pages' + IntToStr(Length(Pages) + 1);

  SetLength(Pages, Length(Pages) + 1);
  Pages[High(Pages)] := pn;
  Panel1Resize(nil);
end;
Ответить с цитированием