Перейти к содержанию
Fire Monkey от А до Я
  • 0

Как ускорить добавление итемов в TListBox?


97mik

Вопрос

У меня на форме есть ListBox (листбокс), в который я добавляю по 10 итемов.

 

Но когда идёт процесс добавления  большого числа TListBoxItem, я вижу как итемы добавляются, это немного не красиво.

 

Можно ли как-нибудь выключить прорисовку, но чтобы AniIndicator работал, а после того как все Items добавятся включить?

Ссылка на комментарий

Рекомендуемые сообщения

  • 0
  • Администраторы

Процесс добавления итема дорогостоящая операция. Так как после добавления итема идет операция выравнивания контента. И так происходит с каждым новым добавляемым TListBoxItem.

 

Однако, у каждого контрола есть два метода, которые позволяют избежать лишних вызовов и ускорить процесс добавления дочерних объектов - TControl.BeginUpdate и TControl.EndUpdate.

 

Решение простое, перед тем, как добавлять итем в листбокс, нужно вызывать метод BeginUpdate. А по окончании добавления всех итемов - EndUpdate.

var
  I: Integer;
  ListItem: TListBoxItem;
begin
  ListBox1.BeginUpdate;
  try
    for I := 0 to 1000 do
    begin
      ListItem := TListBoxItem.Create(Self);
      ListItem.Parent := ListBox1;
      ListItem.Text := I.ToString;
    end;
  finally
    ListBox1.EndUpdate;
  end;
end;
Ссылка на комментарий
Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...