Главная страница
    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.053 c
9-27291
Андрей22
2003-04-07 20:26
2003.10.09
Где можно найти исходники программы


14-27700
hawkins
2003-09-22 06:48
2003.10.09
почему у меня в Delphi6 в help-е предметный указатель пустой?


4-27774
sucer
2003-08-04 09:08
2003.10.09
Проблема с hook на HCBT_CREATEWND!!!Есть код который не работает.


3-27356
gal
2003-09-19 08:32
2003.10.09
работа с БД


3-27315
Игорь Ч
2003-09-17 18:07
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский