Цитата:
Сообщение от 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;