TOOLバーのFloating解除


印刷屋  2007-01-07 20:31:02  No: 24417

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


みんみん  2007-01-08 01:44:12  No: 24418

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

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


みんみん  2007-01-08 01:45:13  No: 24419

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


Fusa  2007-01-08 07:05:21  No: 24420

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

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

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-09 01:29:43  No: 24421

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


Fusa  2007-01-15 23:47:52  No: 24422

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

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

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

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

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

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


印刷屋  2007-01-17 04:36:10  No: 24423

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が宙に浮いてしまって、メインフォームにフォーカスが戻らなくなったんですが、これは何故おこるんでしょう?


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加