ドッキングバーが閉じられたイベントを取得する

(Delphi 4 以降) ドッキング可能な Panelは便利ですが、フローティング中に「X」(閉じるボタン)を押されると消えて無くなってしまいます。そこで閉じられたイベントを拾い、閉じられたら元のドックサイトに戻すようにしてみましょう。閉じられたイベントはパネルのメッセージ (CM_VISIBLECHANGED) をサブクラス化して横取りすればいいと思いますがどうでしょう、、、

■ フローティングバーが閉じられたら元に戻す例
  type
    TForm1 = class(TForm)
      ControlBar1: TControlBar;
      Panel1: TPanel;
    private
      { Private 宣言 }
      //TPanelの元の処理
      OrgProc  : TWndMethod;
      //TPanelのメッセージ横取り処理
      procedure NewWndProc(var Msg : TMessage);
    public
      { Public 宣言 }
    end;

  var
    Form1: TForm1;

  implementation

  {$R *.DFM}

  //初期処理
  procedure TForm1.FormCreate(Sender: TObject);
  begin
    //TPanelの元の処理を退避
    OrgProc           :=  Panel1.WindowProc;
    //TPanelの新しい処理の割り当て
    Panel1.WindowProc :=  NewWndProc;
  end;

  //パネルのメッセージ横取り処理
  procedure TForm1.NewWndProc(var Msg: TMessage);   
  begin
    //メッセージ確認
    if  Msg.Msg = CM_VISIBLECHANGED  then  begin
      //ドックサイトへ戻す
      Panel1.ManualDock(ControlBar1);
      //表示する
      Panel1.Visible  :=  True;
    end;
    //元の処理
    OrgProc(Msg);
  end;