Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.009 c
1-27437
X-shadow
2003-09-28 08:11
2003.10.09
Как програмно поставить фоном рабочего стола HTML страничку


1-27494
anana][
2003-09-26 17:18
2003.10.09
какая-то фигня


4-27781
Delphi5.01
2003-08-02 22:03
2003.10.09
GetWindowText, ne rabotaet tochno!


3-27378
RDen
2003-09-19 07:58
2003.10.09
Как сделать чтобы грид не отображал перемещение по таблице


1-27534
elf
2003-09-30 01:20
2003.10.09
Как узнать создан объект или нет





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский