| imho.ws |
![]() |
|
|
|
# 1 |
|
Guest
Сообщения: n/a
|
Как в Delphi заставить переменную удаленного (Destroyed)объекта "уходить" в Nil? Пример:
Код:
... SomeObject:=TSomeObject.Create; ... SomeObject.Free; IsSomeObjectNil:=(SomeObject=Nil); // Так вот, IsSomeObjectNil всегда равен False. |
|
|
# 3 |
|
Guest
Сообщения: n/a
|
RaZEr
Так надеялся, что объяснять не буду (долго просто) но не выйдет .Итак, для приложений многооконных (многофрейменных) есть такая проблема: если одно окно зависит от другого (кнопка одного открывает другое), то желательно перед созданием дочернего окна проверить, а нет ли его уже: Код:
if Assigned(FChildForm) then FChildForm.Free; |
|
|
# 5 |
|
Guest
Сообщения: n/a
|
Еще, прошу не матюкать за двойную проверку.
Добавлено через 21 минуту: RaZEr Фу-у-у-ух. А я уж думал, что я плохо ООП учил. Специально проверил совет. Объясняю: если объект уничтожен, то в переменной (фактически, указатель) "мусор", не Nil, но и не объект, достать поле или метод такого объекта - ошибка "Access violation". Совет не работает. Может чего другое? |
|
|
# 7 |
|
Guest
Сообщения: n/a
|
RaZEr
Попробовал. С первого раза сработало - у меня чуть шок не случился, ведь HandleAllocated не метод класса. Я уж чуть было не полез за учебником по ООП. Потом же при детальном рассмотрении такая вещь вылезла: по непонятному (может только мне) стечению обстоятельств, первая переменная типа TForm1 видимо указывает на сам класс - все работает ОК, но вторая переменная в моем случае была Nil, 3ая - Nil, 4ая - Access Violation. Так что я не уверен, что это хороший способ. По крайней мере, он противоречит ООП (хотя, может, я чего не понял). |
|
|
# 9 |
|
Guest
Сообщения: n/a
|
theQUE
Да я ж писал уже, что если сам объект уничтожаю, то и Nil присвоить могу (даже без фа-а-а-нтасти-и-и-ической процедуры FreeAndNil). Но проблема, если объект (форма, например) уничтожается встроенными классами, а не моими (имеются ввиду классы, поставляемые с Delphi), тогда я не могу присвоить Nil и, следственно, определить есть этот объект (форма) или его уже нет давно. |