在我的應用程序中,我使用了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位?我注意到這是可以避免的,如果可能的話。 –