我有一個過程來自動調整網格中的列的大小以適應該列中的最大字符串。但是,如果網格中有超過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函數,但畫布。 –