皆さん、すべての MDI フォームが閉じられたときにインターセプトできるイベントまたはメソッドを誰かが知っていれば幸いです。
例:
すべての MDI フォームを閉じると、そのようなイベントがトリガーされるイベントをメイン フォームに実装したいと考えています。
誰かが助けることができれば感謝します。
MainFormで、作成する各 MDI 子にOnClose
orイベント ハンドラーを割り当てることができます。OnDestroy
MDI クライアントが閉じられたり破棄されたりするたびに、ハンドラーは MDI 子フォームがまだ開いているかどうかを確認し、開いていない場合は必要なことを実行します。
procedure TMainForm.ChildClosed(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
// the child being closed is still in the MDIChild list as it has not been freed yet...
if MDIChildCount = 1 then
begin
// do work
end;
end;
または:
const
APPWM_CHECK_MDI_CHILDREN = WM_APP + 1;
procedure TMainForm.ChildDestroyed(Sender: TObject);
begin
PostMessage(Handle, APPWM_CHECK_MDI_CHILDREN, 0, 0);
end;
procedure TMainForm.WndProc(var Message: TMessage);
begin
if Message.Msg = APPWM_CHECK_MDI_CHILDREN then
begin
if MDIChildCount = 0 then
begin
// do work
end;
Exit;
end;
inherited;
end;