I've been looking for a long time for a solution without any luck. Does anyone know a simple way to do that? I would like to stretch for example the second colum of my grid to fit the grid's width!
Use the ColWidths
property, like so:
with StringGrid1 do
ColWidths[1] := ClientWidth - ColWidths[0] - 2 * GridLineWidth;
And for a more robust and flexible solution, take all fixed columns into account and parameterize the column index:
procedure SetColumnFullWidth(Grid: TStringGrid; ACol: Integer);
var
I: Integer;
FixedWidth: Integer;
begin
with Grid do
if ACol >= FixedCols then
begin
FixedWidth := 0;
for I := 0 to FixedCols - 1 do
Inc(FixedWidth, ColWidths[I] + GridLineWidth);
ColWidths[ACol] := ClientWidth - FixedWidth - GridLineWidth;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
SetColumnFullWidth(StringGrid1, 4);
end;
The following code works with FixedCols = 0
(to adapt for other values, ex: FixedCols = 1 ==> for Col := 1 to ...
)
procedure AutoSizeGridColumns(Grid: TStringGrid);
const
MIN_COL_WIDTH = 15;
var
Col : Integer;
ColWidth, CellWidth: Integer;
Row: Integer;
begin
Grid.Canvas.Font.Assign(Grid.Font);
for Col := 0 to Grid.ColCount -1 do
begin
ColWidth := Grid.Canvas.TextWidth(Grid.Cells[Col, 0]);
for Row := 0 to Grid.RowCount - 1 do
begin
CellWidth := Grid.Canvas.TextWidth(Grid.Cells[Col, Row]);
if CellWidth > ColWidth then
Grid.ColWidths[Col] := CellWidth + MIN_COL_WIDTH
else
Grid.ColWidths[Col] := ColWidth + MIN_COL_WIDTH;
end;
end;
end;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With