Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

sMDIForm и sMDIChild [D7]


Apachi ©   (2005-07-07 17:51:00) 

Народ что я делаю не так?

Если я грубо повел себя где то не так сильно не судите...

На sMDIForm обявляем переменную

   child_form: TChildForm;

На пункт меню на главной форме вешаем процедурку стаким содержанием

 if not Assigned(child_form)then begin
   child_form := TChildForm.Create(self);
   child_form.Show;
 end else
   begin
    child_form.SetFocus;
    child_form.Show;
   end;

Теперь что касается самого sMDIChild окна

на закрытие вешаем

 MainForm.child_form:=nil;
 self.free

Что то я ведь сделал не так! потомучто немного пооткрываешь закрываешь эти чилд окна и выскакивают ошибки работы с памятью, подскажите где почитать как их грамотно создавать и удалять, плиз


Юрий Зотов   (2005-07-07 19:01:00) [1]

Гм... и правда... проглядел.
:о)


Игорь Шевченко   (2005-07-07 18:38:00) [2]


> Вывод - при уничтожении дочерней формы надо присваивать
> nil переменной child_form


Собстна, в нулевом посте это и написано.


Юрий Зотов   (2005-07-07 18:36:00) [3]

> Apachi   (07.07.05 17:51)  

Action := caFree - это Вам правильно подсказали. Но одного этого мало, ошибка останется. Потому что при уничтожении объекта ссылки на него не обнуляются, переменная child_form не изменится,  Assigned даст True и сработает child_form.SetFocus. А переменная child_form указывает на уже несуществующий объект - и получим Access Violation.

Вывод - при уничтожении дочерней формы надо присваивать nil переменной child_form.


Игорь Шевченко   (2005-07-07 18:22:00) [4]

begin...end ©   (07.07.05 18:21) [4]

Безусловно.


begin...end   (2005-07-07 18:21:00) [5]

> Игорь Шевченко ©   (07.07.05 18:15) [3]

Точнее, внутри обработчика события нельзя. В обычных методах -- зачастую можно.


Игорь Шевченко   (2005-07-07 18:15:00) [6]


> И в чем разница????


В том, что нельзя уничтожать объект внутри его же метода.


Apachi   (2005-07-07 17:58:00) [7]

Игорь Шевченко ©  Работает!!!

И в чем разница????

Спасибо!


Игорь Шевченко   (2005-07-07 17:52:00) [8]


>  self.free


Заменить на Action := caFree


Наверх

Титульная страница Поиск, карта сайта Написать письмо