Это стандартная TStringGrid / TDrawGrid?
Можно выполнить итерацию, используя Canvas.TextWidth(S)
, чтобы измерить ширину содержимого каждой ячейки, сохранить самую большую, добавить любой отступ, а затем установить Grid.ColWidths[Col] := M;
. Это вызовет одну перерисовку, если это необходимо. (В основном то, что вы делаете, не повторяя операцию рисования 2001 раз.)
procedure TfrmExcel.ResizeCol(const ACol: Integer);
var
M, T: Integer;
X: Integer;
S: String;
begin
M := 20;
for X := 1 to lstSKU.RowCount - 1 do
begin
S:= lstSKU.Cells[ACol, X];
T := lstSKU.Canvas.TextWidth(S);
if T > M then
M := T;
end;
M := M + 15;
lstSKU.ColWidths[ACol] := M;
end;
Если вы хотите установить ширину и высоту ячейки для размещения более крупных шрифтов или чего-то еще, используйте TextExtent
вместо TextWidth
; TextExtent
возвращает TSize
, из которого вы можете прочитать Width
и Height
.