...autosize a StringGrid-Column to fit its content?
Author: Thomas Stutz
{1.}
procedure SetGridColumnWidths(Grid: TStringGrid;
  const Columns: array of Integer);
{
  When you double-Click on a Column-Header the Column
  autosizes to fit its content
  Bei Doppelklick auf eine fixierte Spalte passt sich
  die Spaltenbreite der Textgrösse an
}
  procedure AutoSizeGridColumn(Grid: TStringGrid; column, min, max: Integer);
    { Set for max and min some minimal/maximial Values}
    { Bei max and min kann eine Minimal- resp. Maximalbreite angegeben werden}
  var
    i: Integer;
    temp: Integer;
    tempmax: Integer;
  begin
    tempmax := 0;
    for i := 0 to (Grid.RowCount - 1) do
    begin
      temp := Grid.Canvas.TextWidth(Grid.cells[column, i]);
      if temp > tempmax then tempmax := temp;
      if tempmax > max then
      begin
        tempmax := max;
        break;
      end;
    end;
    if tempmax < min then tempmax := min;
    Grid.ColWidths[column] := tempmax + Grid.GridLineWidth + 3;
  end;
  procedure TForm1.StringGrid1DblClick(Sender: TObject);
  var
    P: TPoint;
    iColumn, iRow: Longint;
  begin
    GetCursorPos(P);
    with StringGrid1 do
    begin
      P := ScreenToClient(P);
      MouseToCell(P.X, P.Y, iColumn, iRow);
      if P.Y < DefaultRowHeight then
        AutoSizeGridColumn(StringGrid1, iColumn, 40, 100);
    end;
  end;
  {************************************************}
  {2.}
  procedure TForm1.Button1Click(Sender: TObject);
  { by P. Below }
  const
    DEFBORDER = 8;
  var
    max, temp, i, n: Integer;
  begin
    with Grid do
    begin
      Canvas.Font := Font;
      for n := Low(Columns) to High(Columns) do
      begin
        max := 0;
        for i := 0 to RowCount - 1 do
        begin
          temp := Canvas.TextWidth(Cells[Columns[n], i]) + DEFBORDER;
          if temp > max then
            max := temp;
        end; { For }
        if max > 0 then
          ColWidths[Columns[n]] := max;
      end; { For }
    end; { With }
  end; {SetGridColumnWidths  }
printed from
  www.swissdelphicenter.ch
  developers knowledge base