1

私のアプリケーションでは、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;

beforeを無効にして有効TScrollBox.Visibleにすると、aftelループは効果がありません。

PS:オブジェクトの作成には時間がかかりません。ボトルネックは親の割り当てです。

upd:大量とは約500アイテムを意味します。

4

2 に答える 2

3

とを使用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;

ここに画像の説明を入力してください

于 2012-05-02T11:00:16.573 に答える