unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids;

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Button1: TButton;
    procedure StringGrid1SetEditText(Sender: TObject; ACol, ARow: Integer;
      const Value: string);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
StringGrid1.Options:=StringGrid1.Options+[goEditing]; 
end;

procedure TForm1.StringGrid1SetEditText(Sender: TObject; ACol, ARow: Integer;
  const Value: string);
var szer, szern:integer;  //szer — szerokość aktualna komórki, szern — szerokość nowa
begin
    //szerokość poprzednia
    szer:=Stringgrid1.ColWidths[ACol];
    //szerokość nowa
    szern:= Stringgrid1.Canvas.Textwidth(Value); //TextWidth — szerokość tekstu
   // dopasowanie szerokości komórki do szerokości wprowadzanego tekstu podczas
   // edycji
    if szern>szer then StringGrid1.ColWidths[ACol]:=szern+4;
end;

end.
