在运行时在 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;
我正在使用 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;