2012-01-25 2 views
4

Мое приложение порождает несколько независимых форм. Однажды при создании приложение забывает о них. Все действия обрабатываются в этой форме. Когда приложение закрывает форму закрывается также, по RTS, я полагаю. Это прекрасно, за исключением того, что ни OnClose, ни событие OnDestroy не запускаются, поэтому происходит утечка памяти. Я могу администрировать, какие формы присутствуют (как и сейчас), но на самом деле приложение должно полностью забыть об этих формах.Есть ли какое-либо событие в форме, когда приложение закрывается

Есть ли способ обнаружить внутри формы, не являющуюся основной формой приложения, что приложение находится в процессе закрытия?

+0

Даже если dtor для формы не вызывается (например, код «halt» или ExitProcess()), если приложение завершается - не должно быть утечек памяти - ОС будет питаться формами, если ничего другого делает. В отличие от этого, вам нужно очень усердно пытаться не вызвать Destroy - приложение хранит список форм и полностью уничтожает их на приложении. –

+0

@ Мартин, вам не нужно стараться, просто забывчивый. Я создал форму с 'nil' в качестве аргумента' Create'. Ответ Дэвида напомнил мне, что это была не такая хорошая идея :-) – Arnold

ответ

6

Событие OnDestroy, безусловно, сгорит, если форма будет уничтожена. Он вызывается из кода уничтожения формы. Таким образом, единственный вывод заключается в том, что ваша форма не уничтожается и не просачивается.

Есть несколько очевидных способов, чтобы убедиться, что ваши независимые формы не просочилась:

  1. При создании затем передать либо Application или MainForm в качестве параметра владельца формы. Когда владелец будет уничтожен, он также уничтожит все, что у него есть, включая ваши формы.
  2. Явно уничтожить эти формы, например, с помощью деструктора основной формы или файла .dpr после вызова Application.Run.

Вариант 1 является наиболее часто используемым подходом.

+0

@DavidHeffeman, ваше первое решение решило мою проблему. Большое спасибо! – Arnold

 Смежные вопросы

  • Нет связанных вопросов^_^