首页 > 解决方案 > 如何将列宽调整为单元格的内容并允许在 Delphi XE7 中修改宽度?

问题描述

早上好,我正在尝试将网格列的宽度调整为其内容,但我还需要可以手动修改宽度。网格是一个 TStringGrid,我使用的是 delphi XE7。我正在尝试使用以下代码来做到这一点:

procedure gDetailDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
var
  vWidth : Integer;
begin
  if (FormPosition.WMaximized = True) then
  begin
    vWidth := gDetail.Canvas.TextWidth(gDetail.Cells[ACol, ARow]);
    if vWidth > aColWidthExpanded[ACol] then
      aColWidthExpanded[ACol] := vWidth+20;
    gDetail.ColWidths[ACol] := aColWidthExpanded[ACol];
  end;
end;

网格正确加载并且列宽正确调整为内容,但我无法手动修改列宽。我做错了什么我无法修改列宽

标签: delphipascaldelphi-xe7

解决方案


您修改事件中的列宽OnDrawCell。当您手动更改宽度时,您会触发将OnDrawCell宽度更改回内容。简而言之,你不能两者都做!


推荐阅读