![]() |
Вопрос по Delphi
Как в Delphi заставить переменную удаленного (Destroyed)объекта "уходить" в Nil? Пример:
Код:
... |
А SomeObject := nil не катит ?
|
RaZEr
Так надеялся, что объяснять не буду (долго просто) но не выйдет :( . Итак, для приложений многооконных (многофрейменных) есть такая проблема: если одно окно зависит от другого (кнопка одного открывает другое), то желательно перед созданием дочернего окна проверить, а нет ли его уже: Код:
if Assigned(FChildForm) then FChildForm.Free; |
fchildform.handle проверяй.
|
Еще, прошу не матюкать за двойную проверку.
Добавлено через 21 минуту: RaZEr Фу-у-у-ух. А я уж думал, что я плохо ООП учил. Специально проверил совет. Объясняю: если объект уничтожен, то в переменной (фактически, указатель) "мусор", не Nil, но и не объект, достать поле или метод такого объекта - ошибка "Access violation". Совет не работает. Может чего другое? |
Раз мусор, то fchildform.handleallocated вернет false.
|
RaZEr
Попробовал. С первого раза сработало - у меня чуть шок не случился, ведь HandleAllocated не метод класса. Я уж чуть было не полез за учебником по ООП. Потом же при детальном рассмотрении такая вещь вылезла: по непонятному (может только мне) стечению обстоятельств, первая переменная типа TForm1 видимо указывает на сам класс - все работает ОК, но вторая переменная в моем случае была Nil, 3ая - Nil, 4ая - Access Violation. Так что я не уверен, что это хороший способ. По крайней мере, он противоречит ООП (хотя, может, я чего не понял). |
FreeAndNil(SomeObject)
|
theQUE
Да я ж писал уже, что если сам объект уничтожаю, то и Nil присвоить могу (даже без фа-а-а-нтасти-и-и-ической процедуры FreeAndNil). Но проблема, если объект (форма, например) уничтожается встроенными классами, а не моими (имеются ввиду классы, поставляемые с Delphi), тогда я не могу присвоить Nil и, следственно, определить есть этот объект (форма) или его уже нет давно. |
Попробуй вместо неявного уничтожения объекта через посылку Perform(CM_УБЕЙ_САМ_СВОЮ_FChildForm, ..., ...)
|
| Часовой пояс GMT +4, время: 04:12. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.