procedure SetGridColumnWidths(Grid: TDBGrid);

const

  DEFBORDER = 10;

var

  temp, n: Integer;

  lmax: array [0..30] of Integer;

begin

  with Grid do begin

    Canvas.Font := Font;

    for n := 0 to Columns.Count - 1 do

      lmax[n] := Canvas.TextWidth(Grid.DataSource.DataSet.Fields[n].DisplayLabel) + DEFBORDER;



    grid.DataSource.DataSet.First;

    while not grid.DataSource.DataSet.EOF do begin

      for n := 0 to Columns.Count - 1 do begin

        //if columns[n].visible then begin

        temp := Canvas.TextWidth(trim(Columns[n].Field.DisplayText)) + DEFBORDER;

        if temp > lmax[n] then lmax[n] := temp;

        //end; { if }

      end; {for}



      grid.DataSource.DataSet.Next;

    end; { while }

    grid.DataSource.DataSet.First;

    for n := 0 to Columns.Count - 1 do

      if lmax[n] > 0 then

        Columns[n].Width := lmax[n];

  end; { With }

end;

 

원본링크 : forum.lazarus.freepascal.org/index.php?topic=16248.0

+ Recent posts