7

皆さん、すべての MDI フォームが閉じられたときにインターセプトできるイベントまたはメソッドを誰かが知っていれば幸いです。

例:

すべての MDI フォームを閉じると、そのようなイベントがトリガーされるイベントをメイン フォームに実装したいと考えています。

誰かが助けることができれば感謝します。

4

3 に答える 3

2

MainFormで、作成する各 MDI 子にOnCloseorイベント ハンドラーを割り当てることができます。OnDestroyMDI クライアントが閉じられたり破棄されたりするたびに、ハンドラーは 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;
于 2013-09-04T00:14:35.167 に答える