Da ich mit meiner ersten Antwort neben den Anforderungen lag, hier die zweite Runde, gegf. kannst Du noch ein wenig feintunen.
Delphi-Quellcode:
Procedure SetDBGridColWidthAuto(Grid: TDBGrid);
var
i: Integer;
ws, w: Integer;
dpl: Integer;
CArray: Array of Integer;
Function cWidth(idx: Integer): Integer;
var
f: TField;
begin
f := Grid.Columns[idx].Field;
if Assigned(f) then
Result := f.DisplayWidth
else
Result := Grid.Columns[idx].Width;
CArray[idx] := Result;
end;
begin
ws := 0;
w := Grid.ClientWidth;
if dgColLines in Grid.Options then
dpl := 1
else
dpl := 0;
if dgIndicator in Grid.Options then
w := w - 12;
SetLength(CArray, Grid.Columns.Count);
for i := 0 to Grid.Columns.Count - 1 do
ws := ws + cWidth(i);
for i := 0 to Grid.Columns.Count - 1 do
begin
Grid.Columns[i].Width := Round(w / ws * CArray[i] - dpl);
end;
end;
procedure TForm3.FormResize(Sender: TObject);
begin
SetDBGridColWidthAuto(DBGrid1);
end;