2013-06-28 44 views
0

我將此過程創建爲我的Firemonkey窗體中的一個TLayout組件的動態TLabel對象。在Firemonkey中動態創建和對齊標籤

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 
--- 

我如何解決它? Iam使用Delphi Xe3

回答

0

最後我解決了它。

解決方案: 根據@ NGLN在 How to dynamically create controls aligned to the top but after other aligned controls?

當已經有對準到頂部的另一個控制,那麼有兩種控制與頂部= 0,並且其中一個是要插入勝。

因此,爲了避免這種情況我之前對準手動分配一個Position.Y性質不同#0:=是alTop在這樣的TLayoutComponent內創建的任何新子:

p.Position.Y:=p.Widht*(Layout14.ChildrenCount-1); 
p.Align:=TAlignLayout.alTop; 
+2

你解釋的解決方案僅僅是一個幸運命中。你用寬度代替身高和希望,每個孩子都有相同的高度 –

+0

你可以在Position.Y中設置一個非常高的數字(例如2000),並獲得相同的效果。 –

+1

@MikeSutton最好的值是'System.Math.MaxSingle':o) –