Главная страница
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.02 c
1-27447
Ser_ega
2003-09-27 23:09
2003.10.09
Дата и время!


1-27523
Vitaliygavrilov
2003-09-26 11:18
2003.10.09
Как поместить иконку моей программы в меню


1-27468
Юрий Ж.
2003-09-25 08:55
2003.10.09
Переменные в DLL?


14-27718
Islander
2003-09-21 11:19
2003.10.09
Разработка Shareware


1-27544
bfg1000ke
2003-09-29 16:15
2003.10.09
Assembler