Delphi 最大化MDI子フォームを切り替えると呼び出される OnResizeイベント
Delphi の古いソースコードの修正中に気づいた(最新では変わっているかも)
MDI子フォームを最大化した状態で、子フォームを切り替えると OnResizeイベントが2回呼び出される
最大化したMDI子フォームをAからBへ切り替えると
つまり、背後に回ったフォームは、ノーマルサイズへ戻されているという事になる
今回、背後に回ったフォームのリサイズイベントは無視したいという条件があったので
MDIに wsMaximized が存在するかをチェックして、1. のイベントをスキップさせるという方法で対応
MDI子フォームを最大化した状態で、子フォームを切り替えると OnResizeイベントが2回呼び出される
最大化したMDI子フォームをAからBへ切り替えると
- フォームAが wsMaximized から wsNormal へ切り替わり OnResizeイベント発生
- フォームBが wsNormal から wsMaximized へ切り替わり OnResizeイベント発生
つまり、背後に回ったフォームは、ノーマルサイズへ戻されているという事になる
今回、背後に回ったフォームのリサイズイベントは無視したいという条件があったので
MDIに wsMaximized が存在するかをチェックして、1. のイベントをスキップさせるという方法で対応
procedure TMdiChildForm.FormResize(Sender: TObject); var I: Integer; MaxFormExists: Boolean; begin // MDI Form に MAXが存在するかどうかを確認 MaxFormExists := False; for I := MdiMainForm.MDIChildCount - 1 downto 0 do begin MaxFormExists := MaxFormExists or (MdiMainForm.MDIChildren[I].WindowState = wsMaximized); end; if (not MaxFormExists) or (WindowState = wsMaximized) then begin // resize func; end; end;上記の場合、最大化を解除した時のリサイズイベントがアクティブな子フォーム以外発生しないので注意が必要となる(アクティブな子フォーム以外は、すでに最大化ではないため)
コメント