![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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