我有一个网格组件(DBGrid),上面有很多列。由于列数众多,因此创建了滚动条,因此网格的某些部分保持隐藏状态。我需要找出什么是DBGrid的实际宽度,包括由于滚动条而未显示的部分。但是Width属性仅给出组件本身的宽度。有人有主意吗?

最佳答案

也许这可能会有所帮助。它是TDBGrid的类帮助器的一部分,该类自动调整最后一列的大小,以便网格没有空白空间。应该很容易适应您的需求。

您可能会注意到,CalcDrawInfo方法是您要寻找的方法。由于它是受保护的,因此您可以使用类帮助程序或常用的受保护的hack来掌握它。

procedure TDbGridHelper.AutoSizeLastColumn;
var
  DrawInfo: TGridDrawInfo;
  ColNo: Integer;
begin
  ColNo := ColCount - 1;
  CalcDrawInfo(DrawInfo);
  if (DrawInfo.Horz.LastFullVisibleCell < ColNo - 1) then Exit;

  if (DrawInfo.Horz.LastFullVisibleCell < ColNo) then
    ColWidths[ColNo] := DrawInfo.Horz.GridBoundary - DrawInfo.Horz.FullVisBoundary
  else
    ColWidths[ColNo] := ColWidths[ColNo] + DrawInfo.Horz.GridExtent - DrawInfo.Horz.FullVisBoundary
end;

07-28 03:28