Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.014 c
3-27327
Kirillka
2003-09-17 11:42
2003.10.09
конвертация


11-27420
ABM
2003-01-28 19:16
2003.10.09
VCL комп-т имеет метод Paint. A в KOL что ? Что же переопределять


14-27738
VID
2003-09-18 17:11
2003.10.09
Бесплатный архив MP3-музыки


1-27454
MIKL
2003-09-27 18:07
2003.10.09
Компоненты не подключаються!


1-27460
Scote
2003-09-29 22:03
2003.10.09
Вместо букв - вопросительные знаки




   Наверх