我用BCB写的,
void TMainForm::SetStringGridWidth(TStringGrid *StringGrid1)
{
int max_width=0;
int i=0;
int j=0;
for(j=0;j<StringGrid1->ColCount;j++)
    {
     max_width=StringGrid1->Canvas->TextWidth(StringGrid1->Cells[j][0]);
     for(i=0;i<StringGrid1->RowCount;i++)
        {
         if(max_width<StringGrid1->Canvas->TextWidth(StringGrid1->Cells[j][i]))
           {
            max_width=StringGrid1->Canvas->TextWidth(StringGrid1->Cells[j][i]);
           }
        }
     StringGrid1->ColWidths[j]=max_width+10;
    }
}如果在窗体显示后执行这个函数,那么效果很好,但是如果这个函数放在FormCreate中,那么有的列就不能显示完全了,但是我的程序要在窗体一显示出来就进行现实,只能放在FormCreate中,,各位大峡有什么好方法吗?
在线等待....

解决方案 »

  1.   

    我用delphi是这样实现的
    var
      len:string;
    begin
      len := Length('我是中国人');
      StringGrid1.ColWidths[1] := 8 * len;//一个字符大概8个象素的宽度,可以根据自己要求改
    end;
      

  2.   

    谢谢楼上的朋友,但是这样,程序的通用性就不太好。
    我发现StringGrid1->Canvas->TextWidth这个函数在窗体创建的时候运行会出现问题
      

  3.   

    放在FormShow中呢?试过没有?
      

  4.   

    很奇怪,我把你的这段代码加到我的程序里面了,就在formshow里调用一个函数,然后这个函数调用的你的这个函数……应该没什么区别把……结果反映很正常,不过有一些特别长的字段无法显示全,感觉是stringgirl自身的ColWidths的限制