4

DelphiでMDIChildウィンドウを非表示にするにはどうすればよいですか?

MDI の子の FormClose() イベントでこのコードを使用していますが、うまくいかないようです:

procedure TfrmInstrument.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caNone;
  ShowWindow(Handle, SW_HIDE);
  frmMainForm.MDIChildClosed(Handle);
end;

子ウィンドウが非表示ではなく最小化されています。

4

2 に答える 2

10

TCustomForm次のように定義された保護された手順があります。

procedure TCustomForm.VisibleChanging;
begin
  if (FormStyle = fsMDIChild) and Visible and (Parent = nil) then
    raise EInvalidOperation.Create(SMDIChildNotVisible);
end;

MDI子ウィンドウで次のようにオーバーライドします。

procedure TMDIChildForm.VisibleChanging;
begin
  // :-P
end;

これが簡単な例です

Jeroenのコメントを読んだ後、私は同様に機能する別の解決策を試しましたが、少しちらつきがあります。

procedure TMDIChildForm.VisibleChanging;
begin
  if Visible then
    FormStyle := fsNormal
  else
    FormStyle := fsMDIChild;
end;

多分これはすべてのWindowsバージョンで動作します。

PS:Windows2k3SP2x86およびWindows7Ultimatex86の最初のソリューションで問題は見つかりませんでした

于 2012-08-29T14:35:22.813 に答える
0

MDI 子ウィンドウを非表示にすることはできません。これは Win32 の制限です。

于 2012-08-29T13:30:04.270 に答える