2011-10-10 12 views
7

私はDelphi 6 Proを使用しています。私のアプリケーションが確実にシャットダウンされているにもかかわらず、フォームが破棄される前に起動するイベントが必要です。私はメインフォームWndProc()でWM_QUITメッセージをトラップすることを考えましたが、フォームがWM_QUITメッセージを見た前に破壊を開始したために動作しませんでした。私はイベントのシャットダウンチェーンのこの時点でコードを実行するために使用できる標準的なDelphiイベントがあるかどうか疑問に思っていましたか?メインフォームのFormClose()イベントは使用できません。なぜなら、発生することは保証されておらず、FormDestroy()イベントは遅すぎます。何か案は? WM_QUITの実行を停止するループメッセージための信号であるとしてアプリケーションが終了してもフォームが破棄される前に呼び出されることが保証されているDelphiイベントはありますか?

答えて

14

あなたは、WM_QUIT messsageはWndProc()方法に到着表示されません、そのようなものとして、それは、通常、ウィンドウプロシージャにディスパッチされていません。

あなたが何を求めているのかについての特別なイベントはありません。ただし、あなたのプロジェクトの.dprファイルを開いて、Application.Runの呼び出し後に必要なコードを入力してください。メッセージループはもはや実行されていませんが、ApplicationMainFormオブジェクトはまだ解放されていません。

+0

Excellent @Remy Lebeau私はプロジェクトファイルの使用を考えなかった。 –

+1

これの唯一の問題は、Application.Runの終了後、すべてが効果的に終了し、ファイナライズセクションのみが実行されることです。これは作品の中で非常に遅れている - 効果的な仕事をするには遅すぎる。 – Misha

7

これを実行する最も良い方法は、SysUtils.pasのAddTerminateProc()ルーチンを使用してプロシージャをフックすることです。これは毎回動作し、私はそれを数年間使っています(あなたがタスクマネージャーを介してプロセスを終了させない限り)。

+0

ありがとうございました。私はあまりにも試してみましょう。 –

関連する問題