问题1:比如一个表格有5列,我以前是用以下方法,正好占完表格宽度,用户看的时候不需要拖动水平滚动条即可完全看到,但分辨率一改动就需要拖动滚动条才能看完??问题2:另外如何记住用户拖动各列的宽度后下次自动按上次的各列宽度显示??  DBGridEh2.Columns[1].Width := 100;
  DBGridEh2.Columns[2].Width := 120;
  DBGridEh2.Columns[3].Width := 120;
  DBGridEh2.Columns[4].Width := 100;
  DBGridEh2.Columns[5].Width := 300;

解决方案 »

  1.   

    >>问题1.如何使表格的各列自分配占完表格的宽度?试试这样,看行不行:var
      iWidth,i:integer;;
    begin
      iWidth := DBGridEh2.Width div DBGridEh2.Columns.Count;//获得每列的宽度  for i:=1 to DBGridEh2.Columns.Count do
         DBGridEh2.Columns[i].Width :=iWidth ;end;
    //问题2:如何记住拖动的宽度后下次自动按上次的各列宽度显示??将拖动后的宽度,保存到ini,或者注册表中,下次程序运行再加载
      
      

  2.   

    俺来晚了!
    楼上回答的已经差不多了!再补充一点点吧!
    问题1:如果你的各列不是平均分配的话,可以利用每个列的宽度所占的比例进行调整!     DBGridEh2.Columns[1].Width :=DBGridEh2.Width *20% ;
         DBGridEh2.Columns[2].Width :=DBGridEh2.Width *15% ;
         DBGridEh2.Columns[3].Width :=DBGridEh2.Width *27% ;
         ... ...
         DBGridEh2.Columns[n].Width :=DBGridEh2.Width *20% ;
    就是代码麻烦了,哈哈!(看来不是很好啊!)问题2:如果你的程序连接了数据库,那么你可以建立一个表专门用来存放各列的宽度,当宽度改变时就把当前的宽度存取一次,这样的设计有助于系统化。(注:如果把宽度的比例放入数据库,那么问题1的解决方案也就相当不错了!实现代码可能会比上面的更简洁!呵呵!)个人意见,仅供参考!
      

  3.   

    DBGridEh2.Columns[1].Width  是可读可写的
    当用户调整宽度之后:
    a:=DBGridEh2.Columns[1].Width;
     
    a就是DBGridEh2.Columns[1]的宽啊
      

  4.   

    至于比例
    b:=DBGridEh2.Columns[1].Width /DBGridEh2.Width;多个列可以利用循环得到