ToolBarを幅をリサイズするには?

解決


ahsan  2008-07-01 20:45:34  No: 31128

ControlBarに配置したToolBarに、MainMenu例えばファイルの書き込み、読み込み
等を自由に登録できるようにしています。
ToolBarにどんどん登録していくと、登録はされているようですが、
表示しきれなくなってしまいます。
ToolBarの右端をつまんで右へドラッグすると幅を変更するような
ことはできるのでしょうか?
その他何かよい方法がございましたら教えて下さい。
よろしくお願い致します。


KHE00221  2008-07-02 15:43:23  No: 31129

TPageScroller でも使用したらどうでしょうか?

BDS 2006 なら WIN32 の所にあります


オモシロイ  2008-07-02 21:59:17  No: 31130

春子:「Menu項目を追加した時に、コードでToolBarの幅を広げてもイイと思うけどネ」
真琴:「でもぉ、右端つまんでドラッグ出来たらオモシロイんじゃない?」
春子:「オモシロイ? そんなぁ〜…」
真琴:「ナンて言いながら、もう作っちゃったンだね^^、ハルコさん」

type
  TToolBar = class(ComCtrls.TToolBar)
  private
    FSizing: Boolean;
    FOffset: Integer;
    TotalButtonWidth: Integer;
    procedure WndProc(var Msg: TMessage); override;
  end;

  .........

procedure TToolBar.WndProc(var Msg: TMessage);
var
  i: Integer;
begin
  inherited;
  case Msg.Msg of
   WM_LBUTTONDOWN:
    if (Width - Msg.LParamLo) < 4 then begin
     SetCursor(Screen.Cursors[crHSplit]);
     FSizing := True;
     FOffset := Width - Msg.LParamLo;
     TotalButtonWidth := 0;
     for i:=0 to ButtonCount-1 do inc(TotalButtonWidth, Buttons[i].Width);
    end;
   WM_LBUTTONUP: FSizing := False;
   WM_MOUSEMOVE:
    begin
     if (FSizing)and(Msg.LParamLo > TotalButtonWidth)and(Msg.LParamLo < Parent.Width) then begin
      Width := Msg.LParamLo + FOffset;
     end;
     if (Width - Msg.LParamLo) < 4 then begin
      if FSizing then SetCursor(Screen.Cursors[crHSplit]) else SetCursor(Screen.Cursors[crSizeWE]);
     end else begin
      SetCursor(Screen.Cursors[crDefault]);
     end;
    end;
  end;
end;

春子:「だけどネ〜…もしかしたら変な不具合が出るコトだってあるのよ? マコト」
真琴:「不具合? どんな?」
春子:「まだ、全部確かめたワケじゃないの、でもナニか変える時は十分気を付けなきゃネ、マコト」
真琴:「そうだよね、ハルコさん、…アタシも変えたいと思う時は気をつける…」
春子:「ン? マコトもナニか変えたいコトあるの?」
真琴:「うん、アタシ…、おじいちゃんだけは、どうしても助けたいの」
春子:「えっ? マサルさんを? マサルさんがどうかしたの? マコト」
真琴:「でも、まだ1年以上先のコト…時間はあるし、一番イイ方法を考えなきゃ…」
春子:「またぁ…、もうどんなオモシロイこと言ってもズル休みはさせないからネ」
真琴:「そんなツモリないよ、ハルコさん、分かってと言ってもムリだと思うけど…」
春子:「ほかにもオモシロイ話あったら、聞いてあげるよ? マコト」
真琴:「もう^^;、チャカさないでよ、ハルコさん」
春子:「マコトがジツはマサルさんのお母さんだった…ナンて話でもオモシロイよね」
真琴:「うっ、それはシリアス過ぎて…笑えないよ;、ハルコさん」
春子:「エッ!?…」
真琴:「あれ? ホンキにした? ハルコさん^^」


ahsan  2008-07-17 18:27:51  No: 31131

KHE00221さん、オモシロイさん、
ご解答をいただいておきながら、
なにも連絡せずにすみませんでした。

あれこれ、色々行ってみました所、
ちょっとぶさいくですが、
テストプログラムで、以下の方法で
動作ができたようです。

1.Form1にControlBar1を配置
2.ControlBar1の上にPanel1を配置
3.Panel1の上にPanel2を配置し、
    Panel2のAlignをalRightにし、
    Widthは10ぐらい(つまめる程度)
    Panel2はつまんでドラッグする為に使用
4.Panel1の上にPageScroller1を配置し、
    PageScroller1のAlignをalClientにする
5.PageScroller1の上にToolBar1を配置&
    ToolButtonを作成
6.Panel2のMouseMoveのイベントで、引数:Xを
    利用して、Panel1のWidthを変更
    ※MouseMoveのイベントが欲しかったので、
      別にPanelでなくてもよかったのですが。
これで、バーそのものもリサイズできるし、
リサイズして、幅が狭くなると、PageScrollerで
バー内のスクロールもできます。

もう少し色々行ってみます。
どうも、ありがとうございました。


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

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






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