在我的应用程序中,我使用 TLabel
对象运行时。
有一个问题:代表 20 个标签需要很长时间(大约 1-2 秒)。
父组件上的 DoubleBuffered 没有帮助。 Application.ProcessMessages
只允许查看创建过程,而不是查看卡住的窗口。
// creating a labels in loop
aLabel:=TLabel.Create(scrlbx);
labels.Add(aLabel); // TList for managing.
with aLabel do begin
Left:=pointLeft;
Top:=pointTop;
Caption:='title';
parent:=scrlbx; //TScrollBox
end;
pointTop:=pointTop+20;
将父级分配到另一个循环后会产生一些效果,但不能解决问题。
for I := 0 to labels.Count-1 do begin
TLabel(labels[i]).Parent:= scrlbx;
end;
禁用和启用
TScrollBox.Visible
before 和 aftel 循环没有效果。PS:
对象的创建不需要时间。
瓶颈是 parent 分配。
更新:大量意味着大约 500 件元素。
最佳答案
使用ScrollBox.DisableAlign
和 .EnabledAlign
.
procedure TForm1.CreateLabels2;
var
I: Integer;
ALabel: TLabel;
ATop: Integer;
begin
ATop := 0;
ScrollBox2.DisableAlign;
for I := 0 to 2000 do
begin
ALabel := TLabel.Create(ScrollBox2);
FLabels.Add(ALabel);
with ALabel do
begin
Caption := 'Title';
SetBounds(0, ATop, Width, Height);
Parent := ScrollBox2;
end;
Inc(ATop, 20);
end;
ScrollBox2.EnableAlign;
end;
关于performance - 创建和慢表示大量 TLabel 运行时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10409677/