Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.10.09;
Скачать: CL | DM;

Вниз

Можно ли быстро вычистить TTreeView?   Найти похожие ветки 

 
SergP ©   (2003-09-22 09:03) [0]

Пользуюсь Treeview1.items.clear
Но если дерево большое: несколько тысяч узлов, то эта процедура очень долго отрабатывает (секунд 5-10). Как можно ускорить?


 
Gordon   (2003-09-22 09:13) [1]

Посмотри нет ли кода на OnChange (или Collapse). Вообще все обработчики в этот момент лучше снять. Тормоза обычно из за них.


 
Vladislav ©   (2003-09-22 09:17) [2]

SendMessage( handle, TVM_DELETEITEM, 0, Longint( TVI_ROOT ));


 
Pit   (2003-09-22 09:23) [3]

Пользуйся у Items методами BeginUpdate EndUpdate. Отключают прорисовку дерева при каждом изменении списка. Помогает.


 
NAlexey ©   (2003-09-22 09:28) [4]

Удали и создай компонент заново.


 
sepa ©   (2003-09-22 10:06) [5]

Pit прав:
with Treeview1 do
begin
Items.BeginUpdate;
try
Items.Clear;
finally
Items.EndUpdate;
end;
end;


 
NAlexey ©   (2003-09-22 10:16) [6]

>sepa ©
Почему это Pit прав? Дерево не будет перерисовываться, но процесса очистки ветвей это не ускорит.


 
ZEE ©   (2003-09-22 10:19) [7]

надо Gordon + Pit = и будет тебе хорошо :) может быть ...


 
NAlexey ©   (2003-09-22 10:35) [8]

>ZEE ©
Предложение Pit здесь кажется совсем излишне...Вот текст процедуры Items.Clear. Видно что методы BeginUpdate и EndUpdate всеже вызываются, и даже вариант предложенный Vladislav © используется. Вопрос о другом...

procedure TTreeNodes.Clear;
var
LHandleAllocated: Boolean;
begin
LHandleAllocated := Owner.HandleAllocated;
if LHandleAllocated then
BeginUpdate;
try
ClearCache;
if Owner.HandleAllocated then
TreeView_DeleteAllItems(Owner.Handle);
finally
if LHandleAllocated then
EndUpdate;
end;
end;


 
SergP ©   (2003-09-22 11:04) [9]


> sepa © (22.09.03 10:06) [5]
> Pit прав:
> with Treeview1 do
> begin
> Items.BeginUpdate;
> try
> Items.Clear;
> finally
> Items.EndUpdate;
> end;
> end;

Спасибо... Вот это мне помогло...А то я первоначально забыл о том что нужно отключить отображение изменений перед очисткой...


 
pasha_golub ©   (2003-09-22 11:04) [10]

tree.free;
tree := ttreeview.create(self)
IMHO


 
SergP ©   (2003-09-22 11:19) [11]


> NAlexey © (22.09.03 10:35) [8]


Странно. А у меня теперь стало быстро работать.

Первоначально было так:

...
treeview.items.clear;
...//Построение дерева;
...
Работало очень долго, но первій раз при пустом treeview было быстро... Поэтому я и решил что тормоза связаны с очисткой.
Теперь сделал:

...
treeview.items.beginUpdate;
treeview.items.clear;
...//Построение дерева;
treeview.items.EndUpdate;
...

И стало все нормально...


 
NAlexey ©   (2003-09-22 11:30) [12]

>SergP ©
Сказать тут нечего, код говорит сам за себя:)


 
mtihonov ©   (2003-09-29 07:15) [13]

Чистить надо с конца дерева 0 будет быстрее.
типа так...

for i:=TreeView1.items.count-1 downto 0
TreeView1.items[i].delete;

на дельфи не пробовал а в бейсике очень помогло...


 
Comoderator ©   (2003-09-29 08:41) [14]

Ответ был дан Vladislav © (22.09.03 09:17) [2]
К чему дальнейшее рассмотрение?



Страницы: 1 вся ветка

Текущий архив: 2003.10.09;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.015 c
6-27631
Maxim Pshevlotsky
2003-08-11 10:57
2003.10.09
Как расшифровать CHMOD в числовое представление?


1-27522
splot
2003-09-30 00:11
2003.10.09
Как тект преобразовать в картинки?


1-27455
romeo
2003-09-27 18:31
2003.10.09
Копирование и вставка компонента... Как?


3-27388
Bless
2003-09-18 17:15
2003.10.09
Как посмотреть IB-базу?


3-27344
3APA3A
2003-09-19 23:56
2003.10.09
Можно ли создать такую таблицу?