Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 22:43 12.06.24 
Компютри и Интернет
   >> Delphi
Всички теми Следваща тема *Кратък преглед

Тема Плаха надеждицанови  
Автор bass (so deep!)
Публикувано11.11.03 19:01



От хелпа за TTreeNode:
"Use the DeleteChildren method to delete all children of a tree node, freeing all associated memory.
Това как би трябвало да се тълкува по отношение на обектите, асоциирани с TTreeNode.Data - чисти ли ги, или няма спасение от изричното забърсване в цикъл?



Тема Забрави! [re: bass]  
Автор Formal (невежа)
Публикувано11.11.03 19:45



...freeing all associated memory - има се предвид паметта, заемана от обектите TTreeNode, които са му деца.
полето Data мисля, че e Pointer, а не TObject и класа TTreeNode няма как да знае дали си асоциирал данни (^record) или обект в него и съответно не може да ти освободи паметта.
Няма спасение от изричното забърсване в рекурсивна процедура.



Тема Re: Забрави!нови [re: Formal]  
Автор bass (so deep!)
Публикувано11.11.03 20:59



ХъХъХъ, надеждата умира последна :-)
TTreeNode.Data (наистина) е поинтър - към динамично създаден обект, и по всички правила този обект трябва да се зачисти след употреба, което и правя досега. Не ползвам рекурсия, а цикъл по абсолютните номера
for nCurrent := 0 to TreeView.Items.Count-1 do Dispose(TTreeView.Items[nCurrent].Data),
което обхожда всички нива.
В хелпа обаче препоръчват да се избягва този подход, понеже ходенето по индекса на Items било много времеемко... Btw, с рекурсията не опираш ли пак до пряко индексиране (в TTreeNode.Item[xxx] за всеки клон)?

Редактирано от bass на 11.11.03 20:59.



Тема Re: Забрави!нови [re: bass]  
Автор NDeu (динозавър)
Публикувано11.11.03 22:29



Най-добре е освобождаването на TTreeNode.Data да става в
OnDeletion event (TCustomTreeView)
Write an OnDeletion event handler to respond when a node is deleted from the tree view control.

Там ти се сервира точно това Node: TTreeNode, което се изтрива.



Тема Re: Забрави!нови [re: NDeu]  
Автор bass (so deep!)
Публикувано12.11.03 12:49



А! Чудесно!
Не се сетих за очевидния факт, че при дистройване на TTreeView ще се вика и OnDelete за всеки Node.
10x




Всички темиСледваща тема*Кратък преглед
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.