我正在尝试制作一个框架DBGrid
它将服务于 10 个以上的表,其中一半字段为默认值,其他字段为每个表独有。
由于列的空间有限,并且我不想手动配置每个表的每一列,因为这是质量非常差的工作,我想知道一种通过其中行的最大内容来计算每列的宽度的方法列,由自己的组件或数据集测量。
有谁知道路吗?世界上有没有具有这种功能的定制组件?我需要一个根据网格所有可见列中的可见数据实现大小增加和减小的解决方案。到目前为止,我的解决方案在选定单元格的绘制方面存在问题,女巫跳出了选定的数据集行。
注意:请不要关闭我的问题。它与网格宽度或表单宽度的配合无关。它是关于所有列的宽度,以最小化水平滚动条,但不一定隐藏它。
您所要做的就是使用网格的画布来测量每列的内容并相应地设置列的宽度。您可以迭代数据集或使用 OnColumnDraw-Event 动态调整宽度。
这是一个示例(我必须使用 5 像素的偏移量)
procedure TForm7.DBGridDrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
Var
w : Integer;
begin
w := 5+DBGrid.Canvas.TextExtent(Column.Field.DisplayText).cx;
if w>column.Width then Column.Width := w;
end;
procedure TForm7.FormActivate(Sender: TObject);
Var
i : Integer;
begin
// Initialize width
for I := 0 to DBGrid.Columns.Count - 1 do
DBGrid.Columns[i].Width := 5 + DBGrid.Canvas.TextWidth(DBGrid.Columns[i].title.caption)
end;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)