procedure CalcGridColumnWidth(var StringGrid:TStringGrid;const WhichCol: Integer);
var
i, Temp, Longest: Integer;
const
Padding = 20;
begin
Longest := StringGrid.Canvas.TextWidth(StringGrid.Cells[WhichCol, 0]);
for i := 1 to StringGrid.RowCount - 1 do
begin
Temp := StringGrid.Canvas.TextWidth(StringGrid.Cells[WhichCol, i]);
if Temp > Longest then
Longest := Temp;
end;
StringGrid.ColWidths[WhichCol] := Longest + Padding;
end;
2条答案
按热度按时间m3eecexj1#
您可以使用StringGrid的画布通过调用
TextWidth
来计算每个单元格中字符串所需的宽度。这里有一个快速的示例来演示。为了简单起见,我用代码来完成所有的事情--StringGrid是在表单的
OnCreate
中设置的,当然这只是为了演示的目的。要运行下面的示例,请创建一个新的VCL Forms应用程序,在表单上放置TStringGrid
,然后添加下面的代码。我已经设置了它,这样您就可以通过将列的索引传递给函数CalcColumnWidth
来在任何列上使用它。const Padding
用于在列的右侧添加空间-将其调整为适合您需要的任何值。如果用户可以编辑单元格的内容,那么在编辑后只需调用
CalcColumnWidth
函数来重新计算列宽。ctehm74n2#
我喜欢上面的代码流是一般的更新