1

我正在使用 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 中做了一些非常相似的事情,并且创建过程总是将最后一个标签放在顶部。

蒂亚

4

1 回答 1

2

看起来对于已经布局的控件,任何其他控件都可以根据默认为 0,0 的坐标进入可以挤压的位置。你可以给一个新的控件一个大的y,这样它就从其余的开始。在它们像在开始/结束更新块内一样布置之前,它们可以被放置在彼此之上,并且将根据创建顺序进行布置。

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;
于 2021-12-08T17:48:25.117 回答