...resize the columns of a TStringGrid / TDrawGrid to fit the text?

Author: Thomas Mueller
Homepage: http://www.s2h.cx

Category: VCL

{   This will resize the columns of a TStringGrid / TDrawGrid (text
    only!) so the text is completely visble. To save some time,
    it uses the first 10 rows only, but that should be easy to fix,
    if you need more. }

// we need this to access protected methods
type
  
TGridHack = class(TCustomGrid);

procedure ResizeStringGrid(_Grid: TCustomGrid);
var
  
Col, Row: integer;
  Grid: TGridHack;
  MaxWidth: integer;
  ColWidth: integer;
  ColText: string;
  MaxRow: integer;
  ColWidths: array of integer;
begin
  
Grid := TGridHack(_Grid);
  SetLength(ColWidths, Grid.ColCount);
  MaxRow := 10;
  if MaxRow > Grid.RowCount then
    
MaxRow := Grid.RowCount;
  for Col := 0 to Grid.ColCount - 1 do
  begin
    
MaxWidth := 0;
    for Row := 0 to MaxRow - 1 do
    begin
      
ColText  := Grid.GetEditText(Col, Row);
      ColWidth := Grid.Canvas.TextWidth(ColText);
      if ColWidth > MaxWidth then
        
MaxWidth := ColWidth;
    end;
    if goVertLine in Grid.Options then
      
Inc(MaxWidth, Grid.GridLineWidth);
    ColWidths[Col]      := MaxWidth + 4;
    Grid.ColWidths[Col] := ColWidths[Col];
  end;
end;

 

printed from
www.swissdelphicenter.ch
developers knowledge base