gpt4 book ai didi

delphi - 如何动态创建与顶部对齐但在其他对齐控件之后的控件?

转载 作者:行者123 更新时间:2023-12-03 15:36:14 24 4
gpt4 key购买 nike

在这种特殊情况下,我使用 PowerPDF库来动态构建 PDF 文档,但这同样适用于在父控件内按顺序动态对齐控件的一般概念。在此库中,TRPPage 是包含所有元素控件的基本控件,在本例中为 TPRLayoutPanel 的顺序实例。

动态添加控件时我会做什么:

  1. 创建一个控件 (TPRLayoutPanel)
  2. 设置控件的父级 (TRPPage)
  3. 将控件对齐到顶部 (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;

最佳答案

再一次,DisableAlignEnableAlign救援:

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;

说明:

启用对齐时,每次将控件添加到容器(在本例中为表单本身)都将重新评估该容器内所有其他控件的所有对齐(和 anchor )设置容器。如果该控件没有设置特定的 Top 属性,则 Top 将为 0。当已经有另一个控件与顶部对齐时,则有两个 Top = 0 控件,即将插入的控件获胜。我(目前)对此没有深入的解释,但事实就是如此,并且位置顺序确实与创建顺序相反。

现在,当容器的对齐被禁用时,连续添加的控件将被简单地插入,其所有定位属性都不会改变。当再次启用对齐时,所有这些控件都会以相同的方式重新计算,不同之处在于,这是按照 Controls 数组中索引的顺序在一个循环中进行的;即它们的创建顺序。

关于delphi - 如何动态创建与顶部对齐但在其他对齐控件之后的控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39635361/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com