Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чем заменить FreeAndNil, освобождает лишнее ??? 
V
    Опции темы
LIND
  Дата 27.9.2011, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 11.10.2010

Репутация: нет
Всего: нет



Доброго времени суток!

Остро нуждаюсь в помощи! 
Проблема в следующем: При выполении FreeAndNil формы, освобождается и объект datamodule,  который использует эта форма(т.е. вызывается его метод Destroy). А вот этого мне как раз и не нужно. Этот datamodule используют и другие формы. Как освободить и обнулить ссылку ТОЛЬКО на конкретную форму, но не трогать при этом datamodule ?

Подскажите плз, кто в курсе этого вопроса....


PM MAIL   Вверх
Snowy
Дата 27.9.2011, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



А ты датамодуль сам создаёшь, или он создаётся автоматически?
Если сам, то как? 
PM MAIL   Вверх
Frees
Дата 27.9.2011, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 9
Всего: 54



Цитата(LIND @  27.9.2011,  14:39 Найти цитируемый пост)
освобождается и объект datamodule,

почитай про FreeNotification


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
LIND
Дата 27.9.2011, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 11.10.2010

Репутация: нет
Всего: нет



Цитата(Snowy @ 27.9.2011,  11:56)
А ты датамодуль сам создаёшь, или он создаётся автоматически?
Если сам, то как?

Датамодуль создается вручную. При создании формы, где используется данный датамодуль, стоит код:
Код

  if (not Assigned(dm_kart)) then
     dm_kart:= Tdm_kart.Create(Self);    

И что самое гадкое, при выдачи команды FreeAndNil для формы, хоть датамодуль уничтожается, указатель на объект datamodule не становится nil. Соответственно получается такая лажа: при повторной инициализации этой формы, да и не обязательно этой (любой другой, где используется данный датамодуль),  
Код
  (not Assigned(dm_kart))  
 выдает false, т.е. типа объект уже создан (хотя естественно просто не обнулена ссылка). 
А мне нужно просто освободить объект формы без закрытия datamodule.  
Вопрос как это сделать???
PM MAIL   Вверх
Frees
Дата 27.9.2011, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 9
Всего: 54



Цитата(LIND @  27.9.2011,  16:25 Найти цитируемый пост)
Tdm_kart.Create(Self);

Self - это владелец дата модуля, при освобождении владельца дата модуль тоже освободится!

делай 
Tdm_kart.Create(nil) или Tdm_kart.Create(Application)


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Snowy
Дата 27.9.2011, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Правильно создавать
Код

  Application.CreateForm(Tdm_kart, dm_kart);
передавая конструктору форму, ты сообщаешь, что это owner.
А owner забирает с собой в могилку всю свою собственность.
Так что, если ты хочешь, чтобы датамодуль жил, пока не закроют приложение, то и owner'ом нужно делать приложение.
PM MAIL   Вверх
LIND
  Дата 27.9.2011, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 11.10.2010

Репутация: нет
Всего: нет



Спасибо огромное! Проблема сразу разрешилась. Объявление datamodule как Self это и была большая ошибка. 
Спасибо за оперативную помощь!  smile 

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0520 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.