【问题标题】:How to adjust the column width to the content of a cell and allow to modify the width in Delphi XE7?如何将列宽调整为单元格的内容并允许在 Delphi XE7 中修改宽度?
【发布时间】:2021-03-16 15:07:15
【问题描述】:

早上好,我正在尝试将网格列的宽度调整为其内容,但我还需要可以手动修改该宽度。网格是一个 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;

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

【问题讨论】:

  • 什么是 TStringAlignGrid?它不是 Delphi 提供的组件。
  • 真的不知道,但我以为是delphi组件,可能是TStringGrid吧。
  • 请检查您的源代码并编辑您的问题以确保正确。

标签: delphi pascal delphi-xe7


【解决方案1】:

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

【讨论】:

  • 绘图事件仅用于绘图!不要在绘图事件中操纵 UI 状态,按原样使用当前状态。在这种情况下,仅在加载表单时或至少在将数据加载到网格中时操作单元格宽度。然后不要再触摸宽度,让用户根据需要调整它们的大小。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-06
  • 2016-12-15
  • 2014-08-28
  • 1970-01-01
  • 2011-02-01
  • 1970-01-01
  • 2013-10-31
相关资源
最近更新 更多