Jer*_*dge 6 delphi controls alignment delphi-xe2
在这种特殊情况下,我使用PowerPDF库来动态构建PDF文档,但这同样适用于在父控件内顺序动态对齐控件的一般概念.在这个库中,TPRPage是包含所有元素控件的基本控件,在本例中是包含所有元素控件的顺序实例TPRLayoutPanel.
动态添加控件时的操作:
TPRLayoutPanel)TPRPage)PRLayoutPanel.Align:= alTop;)问题是它被强制到最开始(顶部)而不是页面的最后(底部).
我试过设定它的顺序PRLayoutPanel.SendToBack;,PRLayoutPanel.BringToFront但没有运气.
如何在父控件中顺序动态创建和对齐多个控件?我目前唯一的解决方法是以相反的顺序(从头到尾)添加控件,这是非常不必要的.
这是我的通用函数,它在此父级中创建对齐控件的每个新实例:
function TfrmReport.InsertPanel: TPRLayoutPanel;
begin
Result:= TPRLayoutPanel.Create(PRPage);
Result.Parent:= PRPage;
Result.Align:= alTop;
Result.Height:= 40; //Default, may change later
end;
Run Code Online (Sandbox Code Playgroud)
NGL*_*GLN 18
再次,DisableAlign并EnableAlign拯救:
procedure TForm1.FormCreate(Sender: TObject);
var
I: Integer;
P: TPanel;
begin
DisableAlign;
try
for I := 0 to 4 do
begin
P := TPanel.Create(Self);
P.Caption := IntToStr(I);
P.Align := alTop;
P.Parent := Self;
end;
finally
EnableAlign;
end;
end;
Run Code Online (Sandbox Code Playgroud)
启用对齐后,每次向容器添加一个控件(在此特定情况下为表单本身)将重新评估该容器中所有其他控件的所有对齐(和锚点)设置.如果控件没有Top设置特定属性,那么Top将是0.当已经有另一个控件与顶部对齐时,则有两个控件Top = 0,即将插入的控件获胜.我(目前)对此没有深入的解释,但它只是,并且位置顺序确实从创建顺序反转.
现在,当禁用容器的对齐时,只需插入连续添加的控件,其所有定位属性都不会改变.当再次启用对齐时,则以相同的方式重新评估所有这些控件,不同之处在于,它按照Controls数组中索引的顺序在单个循环中进行; 即它们的创建顺序.
Dav*_*nan 10
您需要将该Top属性设置为上一个面板的底部.例如,像这样:
PanelTop := 0;
for i := 0 to 5 do
begin
Panel[i] := TPanel.Create(Self);
Panel[i].Parent := Self;
Panel[i].Height := PanelHeight;
Panel[i].Align := alTop;
Panel[i].Top := PanelTop;
inc(PanelTop, PanelHeight);
end;
Run Code Online (Sandbox Code Playgroud)
要使其适合您的代码,您必须跟踪最近添加的面板的位置.也许您可以var在InsertPanel函数中添加一个参数:
function TfrmReport.InsertPanel(var PanelTop: Integer): TPRLayoutPanel;
begin
Result:= TPRLayoutPanel.Create(PRPage);
Result.Parent:= PRPage;
Result.Top:= PanelTop;
Result.Height:= 40;
Result.Align:= alTop;
inc(PanelTop, Result.Height);
end;
Run Code Online (Sandbox Code Playgroud)
我相信你明白了!
| 归档时间: |
|
| 查看次数: |
10847 次 |
| 最近记录: |