![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Здравствуйте.
В своем приложении я постоянно создаю и удаляю объекты 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
|
||||
|
||||
|
Создание и удаление делать стоит как можно реже, т.к. выделение и освобождение памяти - медленные операции. ИМХО лучше менять параметры уже созданных (в том числе скрывать ненужные).
|
|
#3
|
|||
|
|||
|
Цитата:
Я засекал время для 100, 200, 500 объектов (больше не использую) Само создание объектов происходит, как раз, быстро. Узкое место именно в отображении... И тормоза начинаются от 20-30 штук. |
|
#4
|
||||
|
||||
|
попробуй перед удалением/добавлением сделать TScrollBox.AutoScroll:=False; потом вернуть True. на 500 TLabel время удаления/создания занимает 200мс.
|