Delphi の TFrame で 継承した Destroty のイベント発生タイミング
Delphi の TFrame 上のリストに埋め込んだオブジェクトをFrame開放時にFreeしてやろうとしてハマったメモ
TFrame にはコンストラクタとデストラクタ イベントが無いので、継承して追加するも、Destroy イベントが発生したときには、リストのカウンタが既に 0 で埋め込んだオブジェクトへアクセスする手段が無くなっていました
ここによるとTFrameのDestroyが実行されたときには、親フォームからの破棄が行われたあとなんだとか → WM_DESTROY を追加してそこへ処理を記述
private
procedure WMDestroy(var Msg: TWMDestroy); message WM_DESTROY;
//
procedure TFrame1.WMDestroy(var Msg: TWMDestroy);
begin
if (csDestroying in ComponentState) then begin
// ココに Destroy 処理
end;
inherited;
end;
コメント