我有一个网格组件(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;