我在toolbar中放有四个speedbutton名为:s1,s2,s3,s4依次排序在上面,
就是我在form的onshow事件写:s2.visable:=false;这样运行结果是:s2的位置空在那边,像多了个洞,这样的界面不好看,有什么办法,让S2不空出来,直接是s3,如下:
运行前:s1s2s3s4
运行后:s1 s3s4(我想的结果是:s1s3s4)

解决方案 »

  1.   

    最好作一个控件显示排序的方法,以Tag值为顺序,根据Visible属性顺序排列就行,还可复用
      

  2.   

    我用了if s2.visable=false then
             s2.destroy;
    可以得到了效果,但是我如果是用来注销登录的话,也就是第二个用户拥有了s2的权限,它就找不到了S2就出错了?请部怎么做??
      

  3.   

    一个boolean数组,表示该控件是否要显示。
    然后循环,创建,就可以了。
      

  4.   

    根据 用户的等级来判断权限,然后 你没有必要把他隐藏,
    只需要把enable :=false ;就可以了
    可以看到,但是不能够点击 ,
    一样可以实现你的要求啊
      

  5.   

    procedure TForm1.FormCreate(Sender:TObject);
    begin
      s2.Tag:=s2.Left;
      s3.Tag:=s3.Left;
      s4.Tag:=s4.Left;
    end;
    procedure TForm1.FormShow(Sendet:TObject);
    begin
      if s2.Visible then
      begin 
        s2.Left:=s2.Tag;
        s3.Left:=s3.Tag;
        s4.Left:=s4.Tag;
      end
      else
      begin
        s3.Left:=s2.Tag;
        s4.Left:=s3.Tag;
      end;
    end;
      

  6.   

    不要结了我也要说两句 ,如果像hifower 所说的话如果是用来注销的话那不能达到结果了因为一注销, 所有TAG变了left 也变所以会动态产生, speedbutton.create(self)进行动态产生