如何自动固定dbgrid列宽(fix dbgrid column widths automatically)

DBGrid旨在使用户能够在表格网格中查看和编辑数据,它提供了多种自定义表示“其”数据的方式的方法。有了这么多的灵活性,Delphi开发人员总能找到新的方法使它更强大。...

DBGrid旨在使用户能够在表格网格中查看和编辑数据,它提供了多种自定义表示“其”数据的方式的方法。有了这么多的灵活性,Delphi开发人员总能找到新的方法使它更强大。

TDBGrid缺少的一个功能是,没有选项自动调整特定列的宽度以完全适应网格的客户端宽度。在运行时调整DBGrid组件的大小时,列宽不会调整大小。

如果DBGrid的宽度大于所有列的总宽度,则在最后一列之后会出现一个空白区域。另一方面,如果所有列的总宽度大于DBGrid的宽度,则会出现一个水平滚动条。

自动调整dbgrid列宽

在运行时调整网格大小时,您可以遵循一个方便的过程来修复选择性DBGrid列的宽度。

需要注意的是,通常DBGrid中只有两到三列需要自动调整大小;所有其他列显示一些“静态宽度”数据。例如,始终可以为显示数据字段值的列指定固定宽度,这些数据字段由TDateTimeField、TFloatField、TIntegerField和类似字段表示。

此外,您可能会(在设计时)使用字段编辑器创建持久字段组件,以指定数据集中的字段、它们的属性和顺序。对于TField子体对象,可以使用Tag属性指示显示该字段值的特定列必须自动调整大小。

这就是想法:如果希望列自动适应可用空间,请为TField子体的标记属性指定一个整数值,该属性指示对应列的最小宽度。

fixdbgridcolumnswidth过程

开始之前,在包含DBGrid的表单对象的OnCreate事件中,通过为相应TField对象的Tag属性指定非零值,指定需要自动调整大小的列。

procedure TForm1.FormCreate(Sender: TObject);begin//setup autoresizable columns by asigning //Minimm Width in the Tag property. //using fixed value: 40 px Table1.FieldByName('FirstName').Tag := 40; //using variable value: width of the //default Column title text Table1.FieldByName('LastName').Tag := 4 + Canvas.TextWidth( Table1.FieldByName('LastName').DisplayName);end;

在上面的代码中,Table1是一个链接到DataSource组件的TTable组件,DataSource组件与DBGrid链接。Table1.Table属性指向DBDemos Employee表。

我们已经将显示FirstName和LastName字段值的列标记为可自动调整大小。下一步是在表单的OnResize事件处理程序中调用FixDBGridColumnsWidth:

procedure TForm1.FormResize(Sender: TObject);begin FixDBGridColumnsWidth(DBGrid1);end;

注意:如果DBGrid的Align属性包含以下值之一,则所有这些都是有意义的:alTop、alBottom、alClient或alCustom。

最后,以下是FixDBGridColumnsWidth过程的代码:

procedure FixDBGridColumnsWidth(const DBGrid: TDBGrid);var i : integer; TotWidth : integer; VarWidth : integer; ResizableColumnCount : integer; AColumn : TColumn;begin//total width of all columns before resize TotWidth := 0; //how to divide any extra space in the grid VarWidth := 0; //how many columns need to be auto-resized ResizableColumnCount := 0; for i := 0 to -1 + DBGrid.Columns.Count dobegin TotWidth := TotWidth + DBGrid.Columns[i].Width; if DBGrid.Columns[i].Field.Tag 0 then Inc(ResizableColumnCount); end; //add 1px for the column separator lineif dgColLines in DBGrid.Options then TotWidth := TotWidth + DBGrid.Columns.Count; //add indicator column widthif dgIndicator in DBGrid.Options then TotWidth := TotWidth + IndicatorWidth; //width vale "left" VarWidth := DBGrid.ClientWidth - TotWidth; //Equally distribute VarWidth //to all auto-resizable columnsif ResizableColumnCount > 0 then VarWidth := varWidth div ResizableColumnCount; for i := 0 to -1 + DBGrid.Columns.Count dobegin AColumn := DBGrid.Columns[i]; if AColumn.Field.Tag 0 thenbegin AColumn.Width := AColumn.Width + VarWidth; if AColumn.Width then AColumn.Width := AColumn.Field.Tag; end; end;end; (*FixDBGridColumnsWidth*)

  • 发表于 2021-09-10 22:27
  • 阅读 ( 127 )
  • 分类:编程

你可能感兴趣的文章

第八章(c8)和c18柱(c18 column)的区别

C8柱与C18柱的主要区别在于C8柱以辛基硅烷为固定相,而C18柱为十八烷基硅烷。 根据固定相的不同,C8和C18色谱柱彼此不同。我们在高效液相色谱中使用这些柱。我们在这些色谱柱中使用的化合物具有不同的硅烷化合物烷基链...

  • 发布于 2020-10-17 22:12
  • 阅读 ( 913 )

hypersil公司(hypersil)和惯性柱(inertsil column)的区别

...H官能团的反相HPLC柱。 反相高效液相色谱是一种使用疏水固定相的色谱技术。这种固定相适用于大多数有机分析物的保留。反相HPLC的流动相为极性。这种色谱技术有不同类型的色谱柱。Hypersil(或BDS)和inertsil(或ODS)是两个这...

  • 发布于 2021-03-04 20:56
  • 阅读 ( 452 )

如何在excel中管理列

... 如何在excel中添加列 ...

  • 发布于 2021-03-11 21:49
  • 阅读 ( 195 )

css3基本属性备忘单

... 在你学会了如何用HTML构建静态网页之后,是时候去发现如何用CSS来设计它们的样式并使它们看起来更漂亮了。下面我们的CSS3属性备忘表可以帮助您做到这一点!它涵盖了CSS3中您需要...

  • 发布于 2021-03-19 04:34
  • 阅读 ( 290 )

如何在word中创建新闻稿样式的列

时事通讯对于向您的关注者提供有关您的业务或组织的重要更新非常有用。借助Microsoft Word中的特定功能,您将能够立即创建一份漂亮、专业的新闻稿。 在word中创建新闻稿样式列 通过专栏安排文本是创建新闻稿的一个重要部...

  • 发布于 2021-04-03 13:25
  • 阅读 ( 142 )

如何调整microsoft word中的列大小

...置为相似,然后在右边设置一个较小的列。 让我们看看如何使用“列”对话框来完成所有这些操作。如果您的文档中还没有任何文本,或者您知道要达到的精确度量值,那么这是设置列的最佳方法。 在Word中,切换到功能区上的...

  • 发布于 2021-04-06 16:51
  • 阅读 ( 154 )

与automatic pro配合使用的最佳应用程序

Automatic Pro是一款功能强大的应用程序和OBD-II适配器,可以让您从远处监控您的汽车,记录您的行程,甚至在发生事故时获得帮助。最棒的是,您可以通过将其连接到第三方应用程序和服务来扩展它的功能,这些应用程序和服务...

  • 发布于 2021-04-07 21:51
  • 阅读 ( 180 )

如何确定程序启动时完全加载所需的时间?

...序在启动时完全加载所需的时间: There are some programs that automatically start whenever I boot my Windows 10 computer and I would like to shorten the amount of time it takes for my system to fully load and be ready to use. I would like to find out which programs are slowing my comput...

  • 发布于 2021-04-08 00:29
  • 阅读 ( 179 )

如果谷歌chrome没有自动更新,你怎么检查它的版本?

...ing to chrome://help. However, if Google Chrome is not up to date, it will automatically update itself without asking the user. How can I check the version of Google Chrome installed on my computer without it automatically updating itself? I use Google Chrome on Windows 7 SP1 x64 Ultimate. 如果...

  • 发布于 2021-04-09 03:41
  • 阅读 ( 178 )

如何在excel中设置行高和列宽

...的列宽度将更改宽度。其他列的宽度不受影响。 相关:如何在Excel中显示和隐藏行标题和列标题 在指定一行或多行的高度时,可以通过为高度输入特定的数字来更精确。为此,将鼠标移到行标题上,直到它变成右箭头。然后,...

  • 发布于 2021-04-09 06:09
  • 阅读 ( 171 )
nrrx15935
nrrx15935

0 篇文章

相关推荐