TOOLバーのFloating解除


印刷屋  2007-01-07 11:31:02  No: 24417  IP: 192.*.*.*

コントロールバーに乗せてあるツールバーをFloatingさせたときに、×ボタンで消すと自動的にコントロールバーにドッキングさせたいんですが、このとき発生するイベントってどこにあるんでしょうか?

編集 削除
みんみん  2007-01-07 16:44:12  No: 24418  IP: 192.*.*.*

確かに標準イベントではみたいですねぇ。
ツールバーをサブクラス化して
CM_VISIBLECHANGEDを捕まえてみたらどうでしょう。

少し試してみましたがウィンドウの最小化のときは
メッセージが来ずに、ツールバーの×ボタンを
押したときにはくるようです。

編集 削除
みんみん  2007-01-07 16:45:13  No: 24419  IP: 192.*.*.*

>確かに標準イベントではみたいですねぇ。
確かに標準イベントではないみたいですねぇ。

編集 削除
Fusa  2007-01-07 22:05:21  No: 24420  IP: 192.*.*.*

試していなくて申し訳ないんですが

こんな感じで動作しないでしょうか?

interface

  TToolDockSite = class(TToolDockForm)
  private
    procedure WMSysCommand(var Msg: TWMSysCommand);
      message WM_SYSCOMMAND;
    end;

implementation

procedure TToolDockSite.WMSysCommand(var Msg: TWMSysCommand);
begin
  case Msg.CmdType of
    SC_CLOSE: begin
    //この辺りに処理を書く

      //inherited;      //閉じたいときはこちら
      Msg.Result := 0;  //閉じたくないときはこちら
    end;
  else
    inherited;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ToolBar1.FloatingDockSiteClass := TToolDockSite;
end;

このあたりを参考にしています。
[builder:20001] フローティングしたツールバーのクローズボタン

編集 削除
印刷屋  2007-01-08 16:29:43  No: 24421  IP: 192.*.*.*

すいません。せっかく教えてもらったのに、処理の記述の仕方がわかりません。
今までTForm下でしか処理書いてこなかったので、イベントの追加の意味がよくわかってません。
どうやったら、TToolbar(Sender)を渡せるんでしょうか。

編集 削除
Fusa  2007-01-15 14:47:52  No: 24422  IP: 192.*.*.*

ちょっと忙しくて返事いただいてたのを気がつきませんでした。スマセン。

えっと、どこを説明すればいいでしょう?

TFormの宣言の下に
上記のTToolDockSite の宣言を書いてください。

あとは、実装部分どこでもいいので
上記のTToolDockSite.WMSysCommandを書いてください。

上記のFormCreateで、ドッキングを制御するクラスを
指定してあげています。

確かに、やや特殊な処理なのでがんばってみてください。

編集 削除
印刷屋  2007-01-16 19:36:10  No: 24423  IP: 192.*.*.*

procedure TToolDockSite.WMSysCommand(var Msg: TWMSysCommand);
begin
  case Msg.CmdType of
    SC_CLOSE:
    begin
    //この辺りに処理を書く
      inherited ManualDock(TWinControl(frmMain.FindComponent('cbrArtBoard')));
      inherited BoundsRect := Rect(0,0,Width,Height);
      Msg.Result := 0;  //閉じたくないときはこちら
    end;
  else
    inherited;
  end;
end;

としてみました。
ToolBarはドッキングサイトに戻ったんですが、ToolButtonが宙に浮いてしまって、メインフォームにフォーカスが戻らなくなったんですが、これは何故おこるんでしょう?

編集 削除