![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Panels and Splitters [D7, WinXP]
FBuilder © (2005-11-06 11:34:00)В цикле создаю сплитер, панель, сплитер, панель.
Все выставляется:
Splitter := TSplitter.Create(VirtualMainPanel);
Splitter.Parent := VirtualMainPanel;
Splitter.Align := alBottom;
Splitter.Height := 3;
Panel := TPanel.Create(VirtualMainPanel);
Panel.Parent := VirtualMainPanel;
Panel.Align := alBottom;
Получаю 2 панели, лежащие внизу, а выше них - 2 сплитера.
Как обойти косяк??
jack128 (2005-11-06 16:06:00) [1]
procedure CreatePanelsAndSplitters(AParent: TWinControl);
const
Count = 2;
var
i: Integer;
CreationControls: array [0..Count * 2 - 1] of TControl;
begin
for i := 0 to Count - 1 do
begin
CreationControls[i * 2] := TPanel.Create(AParent);
CreationControls[i * 2].Parent := AParent;
CreationControls[i * 2 + 1] := TSplitter.Create(AParent);
with CreationControls[i * 2 + 1] do
begin
Parent := AParent;
Height := 3;
end;
end;
with CreationControls[Low(CreationControls)] do
begin
Top := AParent.Height; // Помещаем первый контрол в самый низ родителя
Align := alBottom;
end;
for i := low(CreationControls) + 1 to High(CreationControls) do
begin
CreationControls[i].Top := CreationControls[i - 1].Top - CreationControls[i].Height; // А все последующие ВЫШЕ предыдущего. Этим и задается порядок расположения контролов при одинаковом Align
CreationControls[i].Align := alBottom;
end;
end;
FBuilder (2005-11-06 14:56:00) [2]
...
> with TPanel.Create(Self) do
> begin
> Parent := Self;
Да, так создается, а вот если на Panel создавать (не Self) - оно не правильно создается :(
Почему?
jack128 (2005-11-06 11:50:00) [3]чего то ты недоговариваешь. Вот, все как надо создается
var
i: Integer;
begin
for i := 0 to 1 do
begin
with TPanel.Create(Self) do
begin
Parent := Self;
Align := alBottom;
end;
with TSplitter.Create(Self) do
begin
Parent := Self;
Align := alBottom;
Height := 3;
end;
end
end