2012-01-25 5 views
4

私のアプリケーションはいくつかの独立したフォームを生成します。一度作成されると、アプリケーションはそれらについて忘れてしまいます。すべてのアクションは、そのフォーム自体で処理されます。アプリケーションが閉じると、フォームも閉じます。RTSによって私は仮定します。これは、OnCloseイベントもOnDestroyイベントも起動されていないことを除いて、メモリリークが発生するという点で問題ありません。私はどのフォームが存在するかを管理することができますが(今のように)、実際にはアプリケーションはこれらのフォームを完全に忘れる必要があります。アプリケーションが終了すると、フォームにイベントが発生しますか

アプリケーションのメインフォームではないフォーム内で、アプリケーションが終了中であることを検出する方法はありますか?

+0

アプリケーションが終了した場合、フォームのdtorが呼び出されなくても(たとえば、コードが 'halt'やExitProcess()など)、メモリリークは発生しません。そうです。それは別に、Destroyを呼び出さないようにしなければならない - アプリケーションはフォームのリストを保持し、アプリケーションの終了時にそれらをすべて破棄します。 –

+0

@マーティン、あなたは一生懸命やって忘れてはいけません。私は 'Create'の引数として' nil'を使ってフォームを作成しました。デイヴィッドの答えは、これはあまり良いアイデアではないことを私に思い出させました:-) – Arnold

答えて

6

OnDestroyフォームが破棄された場合は、確実にイベントが発生します。フォームの破壊コードから呼び出されます。だから唯一の結論は、あなたのフォームが破壊されておらず、漏れているということです。

は明白ないくつかの方法は、あなたの独立したフォームが漏洩していないことを確認するためにあります:あなたが作成する場合

  1. は、フォームの所有者パラメータとしてApplicationまたはMainFormのいずれかを渡します。所有者が破壊されると、あなたのフォームを含め、所有するすべてのものも破壊されます。
  2. Application.Runが返された後に、たとえば、メインフォームデストラクタまたは.dprファイルからこれらのフォームを明示的に破棄します。

オプション1が最も一般的に使用される方法です。

+0

@DavidHeffeman、あなたの最初の解決策は私の問題を解決しました。どうもありがとう! – Arnold

関連する問題