| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Чем заменить FreeAndNil, освобождает лишнее ??? |
| Автор: LIND 27.9.2011, 11:39 |
| Доброго времени суток! Остро нуждаюсь в помощи! Проблема в следующем: При выполении FreeAndNil формы, освобождается и объект datamodule, который использует эта форма(т.е. вызывается его метод Destroy). А вот этого мне как раз и не нужно. Этот datamodule используют и другие формы. Как освободить и обнулить ссылку ТОЛЬКО на конкретную форму, но не трогать при этом datamodule ? Подскажите плз, кто в курсе этого вопроса.... |
| Автор: Snowy 27.9.2011, 11:56 |
| А ты датамодуль сам создаёшь, или он создаётся автоматически? Если сам, то как? |
| Автор: Frees 27.9.2011, 13:15 |
почитай про FreeNotification |
| Автор: LIND 27.9.2011, 13:25 | ||||||
Датамодуль создается вручную. При создании формы, где используется данный датамодуль, стоит код:
И что самое гадкое, при выдачи команды FreeAndNil для формы, хоть датамодуль уничтожается, указатель на объект datamodule не становится nil. Соответственно получается такая лажа: при повторной инициализации этой формы, да и не обязательно этой (любой другой, где используется данный датамодуль),
А мне нужно просто освободить объект формы без закрытия datamodule. Вопрос как это сделать??? |
| Автор: Frees 27.9.2011, 13:30 |
Self - это владелец дата модуля, при освобождении владельца дата модуль тоже освободится! делай Tdm_kart.Create(nil) или Tdm_kart.Create(Application) |
| Автор: Snowy 27.9.2011, 13:37 | ||
Правильно создавать
А owner забирает с собой в могилку всю свою собственность. Так что, если ты хочешь, чтобы датамодуль жил, пока не закроют приложение, то и owner'ом нужно делать приложение. |
| Автор: LIND 27.9.2011, 14:36 |
| Спасибо огромное! Проблема сразу разрешилась. Объявление datamodule как Self это и была большая ошибка. Спасибо за оперативную помощь! |