Delphi の TFrame で 継承した Destroty のイベント発生タイミング

Delphi の TFrame 上のリストに埋め込んだオブジェクトをFrame開放時にFreeしてやろうとしてハマったメモ

TFrame にはコンストラクタとデストラクタ イベントが無いので、継承して追加するも、Destroy イベントが発生したときには、リストのカウンタが既に 0 で埋め込んだオブジェクトへアクセスする手段が無くなっていました

ここによるとTFrameのDestroyが実行されたときには、親フォームからの破棄が行われたあとなんだとか → WM_DESTROY を追加してそこへ処理を記述
  1.     private  
  2.         procedure WMDestroy(var Msg: TWMDestroy); message WM_DESTROY;  
  3.     //  
  4.   
  5. procedure TFrame1.WMDestroy(var Msg: TWMDestroy);  
  6. begin  
  7.     if (csDestroying in ComponentState) then begin  
  8.         // ココに Destroy 処理  
  9.     end;  
  10.     inherited;  
  11. end;  

コメント