在运行时在 TScrollBox 中创建控件开始重新排序

Creating Controls in a TScrollBox at Runtime Starts to ReOrder

我正在使用 Delphi 10.1 和 Firemonkey,并希望在运行时向 TScrollBox 添加控件,但遇到了一些奇怪的行为。

对于这个例子,我创建了标签并将它们添加到 TScroll 框。

标签设置为 TAlignLayout.Top 所以我假设创建的每个新标签都将位于前一个标签的下方。

我希望按照创建顺序从上到下创建标签。知道我做错了什么吗?

这是创建标签的代码:-

procedure TForm1.Button4Click(Sender: TObject);
var
  lbFileDate: TLabel;
begin
  ScrollBox2.BeginUpdate;
  lbFileDate := TLabel.Create(ScrollBox2);
  lbFileDate.Parent := ScrollBox2;
  lbFileDate.Align := TAlignLayout.Top;
  lbFileDate.Text := DateTimeToStr(Now);
  ScrollBox2.EndUpdate;
end;

我在 Delphi 10.1 VCL 中做了一些非常相似的事情,创建过程总是将最后一个标签放在顶部。

蒂亚

看起来对于已经布置好的控件,任何额外的控件都可以根据它们的坐标(默认为 0,0)进入它们可以被挤压的位置。你可以给一个新的控件一个大的 y,这样它就可以在其余的下面开始。在它们像在 begin/end 更新块中一样被布置之前,它们可以被放置在彼此之上并且将根据创建顺序被布置。

procedure TForm1.Button1Click(Sender: TObject);
var
  lbFileDate: TLabel;
begin
  ScrollBox2.BeginUpdate;
  for var I : integer := 1 to 10 do
  begin
    lbFileDate := TLabel.Create(ScrollBox2);
    lbFileDate.Parent := ScrollBox2;
    lbFileDate.Position.Y := 1E10;
    lbFileDate.Align := TAlignLayout.Top;
    lbFileDate.Text := DateTimeToStr(Now) + ' ' + IntToStr(I);
  end;
  ScrollBox2.EndUpdate;
end;