我创建了这个过程,在我的firemonkey表单中将dinamic TLabel对象创建到一个TLayout组件中。
procedure TForm1.printinLayout14(const str: String);
var
P:TLabel;
begin
P:=TLabel.Create(Self);
P.parent:=Layout14;
p.Align:=TAlignLayout.alTop;
p.Text:=str;
p.AutoSize:=true;
Application.ProcessMessages;
end;
在我的代码中,我将以下一种方式调用此过程
printinLayout14('l1');
printinLayout14('l2');
printinLayout14('l3');
printinLayout14('l4');
预期结果将是:
---
l1
---
l2
---
l3
---
l4
---
但最终结果是
---
l1
---
l4
---
l3
---
l2
---
我该如何解决?我使用Delphi Xe3
答案 0 :(得分:1)
最后我解决了它。
解决方案: 根据@ NGLN的说法 How to dynamically create controls aligned to the top but after other aligned controls?
当已经有另一个控件与顶部对齐时,则有两个控件Top = 0,即将插入的控件获胜。
为了避免这种情况,我在ALign之前手动分配了一个不同的#0的Position.Y属性:= alTop用于以这种方式在TLayoutComponent内创建的任何新子项:
p.Position.Y:=p.Widht*(Layout14.ChildrenCount-1);
p.Align:=TAlignLayout.alTop;