Страница 2 из 2

Re: Очищение объектов

Добавлено: 12 дек 2006, 19:04
Лелик_1044
если так использовать
try
for i:=0 to Tree.Items.Count-1 do
if Assigned(Tree.Items.Item.Data) then Tree.Items.Item.Free;
finally
Tree.Items.Clear; - тут выскакивает

Re: Очищение объектов

Добавлено: 13 дек 2006, 10:33
LAngel
попробуй
[syntax="delphi"]if Assigned(Tree.Items.Data) then TObject(Tree.Items.Data).Free;[/syntax]

Re: Очищение объектов

Добавлено: 13 дек 2006, 10:55
Лелик_1044
LAngel,
А treeview.clear; как думаешь надо будет делать?

Re: Очищение объектов

Добавлено: 13 дек 2006, 11:41
Лелик_1044
Нашел сейас думаю как избавитья

Когда добавляю так
Tree.items.Addobject(nil,'111',Data)
Data это класс с переменными
или так
Tree.items.Add(nil,'111')
то все нормалньо очищается

но если так, то ошибка
Tree.items.Addobject(nil,'111',pointer(111))

Re: Очищение объектов

Добавлено: 13 дек 2006, 12:28
LAngel
&quot писал(а):LAngel,
А treeview.clear; как думаешь надо будет делать?
TObject(Items.Data).Free вызовет деструктор объекта, указатель которого "привязан" к Data итема, сам итем продолжит существовать, так что Items.Clear вызывать надо, если необходимо очистить список самих итемов.
&quot писал(а):Tree.items.Add(nil,'111')
то все нормалньо очищается

но если так, то ошибка
Tree.items.Addobject(nil,'111',pointer(111))

Потому что, в первом случае if assigned(Items.Data) будет false, и "удаление объекта" не произойдет, а во втором, будет произведена попытка удалить некий объект по адресу (111), которого, есс-но не существует.

Если в параметр Data заносится просто информация, а не ссылки на объекты наследники TObject, тогда будет достаточно просто удалить сами итемы (Items.clear).

Если в Data заносится указатель на выделенную память - надо будет сначала освободить память FreeMemory(Items.Data).

Выбирай свой случай :) ))

Re: Очищение объектов

Добавлено: 13 дек 2006, 14:42
Лелик_1044
FreeMemory(Items.Data).
Вот тут-то и вылетает если ссылка

П.С. перевл я тут эти дервье на этот метод очищения, теперь если в одном дереве добавть данные с датой потом скопировать их в другое. Затем очистть данные в 1 дереве приведенным выше методом, то будет другая инфомрация во 2 дереве

Re: Очищение объектов

Добавлено: 14 дек 2006, 14:15
Игорь Акопян
Лелик, лажа у тебя там с указателями явно

внимательно перечитываем пост 15

Re: Очищение объектов

Добавлено: 14 дек 2006, 14:51
SergeyS
Сохраняй все свои объекты во вспомогательном списке, каждый раз, когда привязываешь указатель объекта к TTreeItem.Data добавляй этот же объект и во вспомогательный список (для начала проверяй, что его там ещё нет) и когда тебе будет нужно, то очищай только этот вспомогательный список, и будет у тебя что-то типа Garbage Collection, только без контроля связей между объектами :)