动态调整DBGrid列的大小

时间:2016-12-23 19:24:17

标签: delphi delphi-2010

如果一些或它们是静态的,我如何计算dbgrid中列的宽度。例如,前三个需要有静态宽度,剩下五个需要调整大小。

目标是使复选框打开或关闭可见性并更改列宽以适应网格。

Image

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  i:integer;
  column1: integer;
  width2 : integer;
  width1: integer;
begin
  width1 := 1;
  column1:=-3;
  for i := 0 to DBGrid1.Columns.Count - 1 do
  begin
    width1 := width1 + DBGrid1.Columns[i].Width + 1;
    if DBGrid1.Columns[i].Visible then
       column1:=column1 +1;
  end;
  width2:=(80 div column1);
  if ((width1 < DBGrid1.ClientWidth - width2) or (width1 > DBGrid1.ClientWidth +width2)) then
  begin
    DBGrid1.Columns[0].Width:=(DBGrid1.ClientWidth)*10 div 100;
    DBGrid1.Columns[1].Width:=(DBGrid1.ClientWidth)*5 div 100;
    DBGrid1.Columns[2].Width:=(DBGrid1.ClientWidth)*(100-colum1n*width2-15) div 100;
    DBGrid1.Columns[3].Width:=(DBGrid1.ClientWidth)*width2 div 100;
    DBGrid1.Columns[4].Width:=(DBGrid1.ClientWidth)*width2 div 100;
    DBGrid1.Columns[5].Width:=(DBGrid1.ClientWidth)*width2 div 100;
    DBGrid1.Columns[6].Width:=(DBGrid1.ClientWidth)*width2 div 100;
    DBGrid1.Columns[7].Width:=(DBGrid1.ClientWidth)*width2 div 100;
  end;

这是我目前使用的代码,但它的工作有点慢。

提前致谢。

0 个答案:

没有答案