0

この手順を実行して、動的な TLabel オブジェクトを作成して、firemonkey フォームの 1 つの 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 の 2 つのコントロールがあり、挿入されようとしているコントロールが優先されます。

したがって、これを回避するために、次の方法で TLayoutComponent 内に作成された新しい子に対して、ALign:=alTop の前に異なる #0 の Position.Y プロパティを手動で割り当てます。

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