![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Free [D5, Win2k]
Swamp © (2002-09-23 17:27:00)Как узнать, был ли выполнен метод Free или Destroy у объекта, и в общем случае существует ли объект. Проверка на nil естно не подходит.
still swamp (2002-09-24 09:31:00) [1]В общем и целом... способа нет, однако последний предложенный в моем случае разрешил вопрос.
Старый Паскалист (2002-09-23 18:07:00) [2]Да можно и проще:
ТУправляющаяФорма = class(...)
procedure ОчиститьСвязныеУказатели;
end;
ТРодительскаяФорма.РодительскаяФормаDestroy; //OnDestroy;
begin
if FУправляющаяФорма <> nil then
FУправляющаяФорма.ОчиститьСвязныеУказатели;
...
end;
still swamp (2002-09-23 17:55:00) [3]ой да.... это закат солнца вручную.
легче в try обратиться...
коряво. но что делать.
Старый Паскалист (2002-09-23 17:52:00) [4]Пусть при закрытии родительская форма посылает
специальное сообщение управляющей, а та по нему
обнуляет всех связных указателей
still swamp (2002-09-23 17:47:00) [5]Достаточно простая ситуация. Формой управляет внешняя форма. Туда переданы некие указатели для связи. Родительская закрыта, управляющая нет, так как она нужна. Вот и проблемка.
Старый Паскалист (2002-09-23 17:44:00) [6]Никак ты в общем случае не проверишь.
Надо проектировать так, чтобы этого не происходило.
В компонентах, например, специально для этих целей придуман механизм оповещения (виртуальный метод Notification). Возможно, тебе стоит копать в этом направлении.
qube (2002-09-23 17:43:00) [7]Нулить компоненты? Это как и зачем?
Если форма освобождается при закрытии, то не существует уже сама форма.
И откуда может вернуться указатель убитого объекта?
still swamp (2002-09-23 17:37:00) [8]Ну да - понятно, а если скажем я закрываю окошко, а на нем несколько компонент, и нет ничего приятнее как их все нулить. Или еще веселее... ко мне вернулся указатель, бог знает когда зафришенного объекта.
MBo (2002-09-23 17:31:00) [9]надо при Free и обNil-ять.
А проще FreeAndNil делать