以前经常看到有帖子问,在delphi下如何实现类似office的工具栏(普通的工具栏在窗体改变大小,使按牛不能全部显示出来的时候,当将工具栏拖到新的一行时,按牛也无法全部显示)。实现起来有些麻烦,不过实现一个类似delphi的工具栏到是非常简单。具体方法如下:
在窗体上放一个ControlBar,并在其上随便加几个ToolBar。在Toolbar上添加一些按牛。为ToolBar设置属性:AutoSize:= false; Tag:= Toolbar.width + 13(视具体情况而定,可能是其他数值)。为ControlBar的BandMove事件添加如下代码:
ARect.Right:= ARect.Left + Control.Tag;运行程序。试着改变窗体大小并拖拽工具栏检查效果。

解决方案 »

  1.   

    我觉的tag用在其它的地方更有意义,这儿也可以直接用它的width,反正都是设计期已经固定死的;
    _____________________________________________________________________暮春三月,羊欢草长,天寒地冻,问谁饲狼?人心怜羊,狼心独怆,天心难测,世情如
    霜……
      

  2.   

    width虽然在设计期间是固定,但在运行期间会随着controlbar的变化而发生变化。所以也就无法实现预期的效果了。
      

  3.   

    回复人:fengjn(颗粒) ( ) 信誉:95  2003-12-17 15:01:00  得分:0 
     
     
      width虽然在设计期间是固定,但在运行期间会随着controlbar的变化而发生变化。所以也就无法实现预期的效果了。
      
     
    ////////////////////
    用一个类来管理呢?
    但是,tag的用法如果这样用的话,的确有些大材小用了,它可以用来存放类的指针,可以用来存放上、下属关系;
    我觉的楼主的这种做法,没有问题,但是,如果用tag在设计期限定的话,那么软件的健壮性又提现在那儿呢?不同的分辨率的机器又怎么办?那时,整个窗体都在改变,ToolBar等还不需要改变吗?width本身就应该改变,所以,tag本身也应该改变,不然,实现了你的这种功能,但是当单行不能满足情况的条件下你是双行添重呢?还是单向Clinet之外真充呢?_____________________________________________________________________暮春三月,羊欢草长,天寒地冻,问谁饲狼?人心怜羊,狼心独怆,天心难测,世情如
    霜……
      

  4.   

    to: 小小
    有两点不明,还请指教。
    1、你说的可以用来存放上、下属关系到底是什么意思。是否可以通过action来实现?
    2、分辨率的改变不会起什么作用。分辨率底的时候你看到东西会变大是因为你的显示器的基本单位发生变化。如没行800个象素,但是每英寸的象素数是不变的(小字体96)。而你的ctrl的width并没有改变。ps:用类来管理是什么意思,请指点。
      

  5.   

    :-)
    比如类之间的多态,产生了向上引用,其中就可以用到它
    还有,我要确定控件数组,也可能会用到它类来管理:
        就是将一个ToolBar只看做某一动像的一个状态的保存着;_____________________________________________________________________暮春三月,羊欢草长,天寒地冻,问谁饲狼?人心怜羊,狼心独怆,天心难测,世情如
    霜……
      

  6.   

    to:小小
    可以在formresize里面再设定一下width
      

  7.   

    to: nyf1220(我是党员) 
    tag是integer类型的属性,没有实际的意义。可以作为用户自定义的扩充。你可以把他当作指针使用,这就相当于tstrings类的data了。可以保存附加结构。
    to: hymn(hymn) 
    在formresize中设置width是不会起到预期的效果的。