我有一个过程来自动调整网格中的列的大小以适应该列中的最大字符串。但是,如果网格中有超过2000条记录,则需要一些时间。有关加快速度的任何提示?加快步骤来调整网格列的大小
//lstSKU = grid
procedure TfrmExcel.ResizeCol(const ACol: Integer);
var
M: Integer;
X: Integer;
S: String;
R: TRect;
begin
M:= 20;
lstSKU.Canvas.Font.Assign(lstSKU.Font);
for X:= 1 to lstSKU.RowCount - 1 do begin
S:= lstSKU.Cells[ACol, X];
R:= Rect(0, 0, 20, 20);
DrawText(lstSKU.Canvas.Handle, PChar(S), Length(S), R,
DT_LEFT or DT_VCENTER or DT_CALCRECT);
if R.Right > M then
M:= R.Right;
end;
M:= M + 15;
lstSKU.ColWidths[ACol]:= M;
end;
它没有绘制单元格的尺寸 - DrawText过程中的“DT_CALCRECT”意味着它不绘制在画布上 - 它只计算矩形的宽度。但是你是对的,TextWidth应该会更好,虽然我很确定它已经使用相同的方法来获得相同的结果。值得一试,如果有帮助,我会告诉你。 –
Doh!错过了'DT_CALCRECT'。不过,我认为'TextWidth'仍然会更快,因为你不需要所有其他标志。 –
是的,这削减了一半的时间 - 除了我不得不修改它 - TFont(至少在Delphi7中)没有TextWidth函数,但画布。 –