在我的应用程序中,我使用了TLabel
对象运行时。创建并缓慢表示大量的TLabel运行时
这里有一个问题:表示标签20需要大量的时间(约1-2秒)。
DoubleBuffered在父组件上没有帮助。 Application.ProcessMessages
只允许观看创建的过程,而不是看frosen窗口。
// 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
前aftel循环没有影响。
PS: Creting对象并不需要花费时间。 瓶颈是父指派。
UPD:大量意味着如果你是刚刚创造20 TLabel
,添加Application.Processmessages
是不是一个好主意,因为这将重绘其立即显示新添加的组件约500项..
不能确认问题;测试和1000个标签创建在眼睛眨眼滚动框中。 – kludg
我还测试了2000年...不到一秒...但是...如果我激活*自定义样式*,花费的时间炸毁... – Whiler
你有条件断点和编译64位?我注意到这是可以避免的,如果可能的话。 –