在Firemonkey中动态创建和对齐标签

时间:2013-06-28 00:37:28

标签: delphi dynamic components firemonkey

我创建了这个过程,在我的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

1 个答案:

答案 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;