0

我制作了这个程序,将动态 TLabel 对象创建到我的 firemonkey 表单中的一个 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

4

1 回答 1

1

最后我解决了。

解决方案:根据@NGLN 如何动态创建对齐顶部但在其他对齐控件之后的控件?

当已经有另一个控件与顶部对齐时,则有两个控件 Top = 0,即将插入的控件获胜。

因此,为了避免这种情况,我在 ALign:=alTop 之前为 TLayoutComponent 中创建的任何新子项手动分配了一个不同的 Position.Y 属性 #0:

p.Position.Y:=p.Widht*(Layout14.ChildrenCount-1);
p.Align:=TAlignLayout.alTop;
于 2013-06-28T03:48:35.690 回答