|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Создание и отображение большого количества Tlabel run-time
Здравствуйте.
В своем приложении я постоянно создаю и удаляю объекты Tlabel, для отображения данных. Проблема в том, что при отображении уже 20 надписей возникает ощутимая задержка. DoubleBuffered на родительском не помогает. Application.ProcessMessages лишь позволяет наблюдать за процессом создания, а не смотреть на застывшее окно. Код:
// в цикле создаем надписи. aLabel:=TLabel.Create(scrlbx); labels.Add(aLabel); // список TList для последующей работы 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; Выключение и включение параметра Visible до и после циклов также не спасает. |
#2
|
||||
|
||||
Создание и удаление делать стоит как можно реже, т.к. выделение и освобождение памяти - медленные операции. ИМХО лучше менять параметры уже созданных (в том числе скрывать ненужные).
jmp $ ; Happy End! The Cake Is A Lie. |
#3
|
|||
|
|||
Цитата:
Я засекал время для 100, 200, 500 объектов (больше не использую) Само создание объектов происходит, как раз, быстро. Узкое место именно в отображении... И тормоза начинаются от 20-30 штук. |
#4
|
||||
|
||||
попробуй перед удалением/добавлением сделать TScrollBox.AutoScroll:=False; потом вернуть True. на 500 TLabel время удаления/создания занимает 200мс.
Пишу программы за еду. __________________ |