我的DBGrid有三列数据显示,当三列的宽度没有DBGrid宽时,我希望最后一列的宽度加宽,使三列之和刚好等于DBGrid的ClientWidth.(这样好看一些)
procedure TForm1.Button1Click(Sender: TObject);
var
  tmpWidth:integer;
begin
  tmpWidth:=DBGridEX1.Columns[0].Width+DBGridEX1.Columns[1].Width+DBGridEX1.Columns[2].Width;
  DBGridEx1.Columns[2].Width:=DBGridEx1.Columns[2].Width+(DBGridEx1.ClientWidth-tmpWidth)-16;
end;
可是为什么出现水平滚动条呢?(如果不减16)
这个到底是什么宽度?
不知道我说清楚了没有,呵呵.

解决方案 »

  1.   

    你把DBGrid1.Options的dgindicator设为false,不过还是要减去2,我想可以是grid的边框占了这2个位吧
      

  2.   

    To WuLoveXue:
       Indicator不是算在ClientWidth中的,我试过把Indicator的宽度加宽了,可是DBGrid的ClientWidth还是没有变啊?
       如果是分割线,可是减16,这个好像不是分割线的宽度.(只有三根线,不可能有这么宽吧.)
      是不是滚动条的宽度?(应该不是的,不过滚动条最接近这个宽度,呵呵)
      

  3.   

    To henry2003:
       整个窗体全部是用代码生成的.(通用窗体)  没有办法了吗?
      

  4.   

    to yangs1295118971:
    1.Indicator不是算在ClientWidth中的,我试过把Indicator的宽度加宽了,可是DBGrid的ClientWidth还是没有变啊?  Indicator加宽,ClientWidth没有变,正确,应该是这样啊,因为Indicator是在ClientWidth里的,它加宽了,它的父的宽度有变化吗?比如一个FORM里有个按钮,你把按钮加宽,FORM的宽度会变吗?呵呵,其实它们是包含关系,而不是并列关系!2.   如果是分割线,可是减16,这个好像不是分割线的宽度.(只有三根线,不可能有这么宽吧.)
      是不是滚动条的宽度?(应该不是的,不过滚动条最接近这个宽度,呵呵)     我这里是如果Indicator加false,有三个字段只要减去2,所以我觉得是字段之间的那根线占去了这两个位,而不是16。我试了,如果是4个字段的话,要减去3!呵呵,不知讲得对不对,请指正!
      

  5.   

    To WuLoveXue:
         1.Indicator加宽,ClientWidth没有变,正确,应该是这样啊,因为Indicator是在ClientWidth里的,它加宽了,它的父的宽度有变化吗?比如一个FORM里有个按钮,你把按钮加宽,FORM的宽度会变吗?呵呵,其实它们是包含关系,而不是并列关系!
      R:是的.Indictor属于DBGrid,是包含关系.  2.我这里是如果Indicator加false,有三个字段只要减去2,所以我觉得是字段之间的那根线占去了这两个位,而不是16。我试了,如果是4个字段的话,要减去3!呵呵,不知讲得对不对,请指正
      R:是的如果把Indicator设置为Flase,那么三个字段要减去2.
        可以我打开Indicator,还要减什么呢? 请多多指教.   
      

  6.   

    如果打开Indicator,这个的话,它就占去了ClientWidth的一部分,所以要减去Indicator所占的宽度啊!
      

  7.   

    没打开Indicator的时候,计算公式应是:
    DBGRID的ClientWidth=字段1.width + 间隔符.width +字段2.width+间隔符.width +字段3.width+..............打开Indicator的时候,计算公式应是:
    DBGRID的ClientWidth=Indicator.width + 字段1.width + 间隔符.width +字段2.width+间隔符.width +字段3.width+..............
      

  8.   

    To WuLoveXue:
      那以标准的DBGrid的IndicatorWidth是多宽呢?(好像是11)
      可是这样不行?
     
      太谢谢你了.
      

  9.   

    这个是无Indicator时的代码:
    procedure TForm1.Button1Click(Sender: TObject);
    var
      tmpWidth:integer;
    begin
      tmpWidth:=DBGrid1.Columns[0].Width+DBGrid1.Columns[1].Width+DBGrid1.Columns[2].Width;
      DBGrid1.Columns[2].Width:=DBGrid1.Columns[2].Width+(DBGrid1.ClientWidth-tmpWidth)-(DBGrid1.Columns.Count-1);
    end;
    这个是有Indicator时的代码:
    procedure TForm1.Button1Click(Sender: TObject);
    var
      tmpWidth:integer;
    begin
      tmpWidth:=DBGrid1.Columns[0].Width+DBGrid1.Columns[1].Width+DBGrid1.Columns[2].Width;
      DBGrid1.Columns[2].Width:=DBGrid1.Columns[2].Width+(DBGrid1.ClientWidth-tmpWidth)-(DBGrid1.Columns.Count-1)-11; //是这样吗? 
    end;
      

  10.   

    Indicator是多宽,我到是没试过,你可以测试下啊!
    procedure TForm1.Button1Click(Sender: TObject);
    var
      tmpWidth:integer;
    begin
      tmpWidth:=DBGrid1.Columns[0].Width+DBGrid1.Columns[1].Width+DBGrid1.Columns[2].Width;
      DBGrid1.Columns[2].Width:=DBGrid1.Columns[2].Width+(DBGrid1.ClientWidth-tmpWidth)-(DBGrid1.Columns.Count-1);
    end;这样写可以简单些:
    procedure TForm1.Button1Click(Sender: TObject);
    var
      tmpWidth:integer;
    begin
      tmpWidth:=DBGrid1.Columns[0].Width+DBGrid1.Columns[1].Width;
      DBGrid1.Columns[2].Width:=DBGrid1.ClientWidth-tmpWidth-(DBGrid1.Columns.Count-1);
    end;
      

  11.   

    我发现不光是Indicator宽度,好像还有什么宽度?呵呵.