Форум: "Основная";
Текущий архив: 2003.10.09;
Скачать: [xml.tar.bz2];
ВнизМожно ли быстро вычистить 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.053 c