我用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中,,各位大峡有什么好方法吗?
在线等待....
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中,,各位大峡有什么好方法吗?
在线等待....
var
len:string;
begin
len := Length('我是中国人');
StringGrid1.ColWidths[1] := 8 * len;//一个字符大概8个象素的宽度,可以根据自己要求改
end;
我发现StringGrid1->Canvas->TextWidth这个函数在窗体创建的时候运行会出现问题