Как сделать так, чтобы столбцы StringGrid соответствовали ширине сетки?

Я долго искал решение, но безрезультатно. Кто-нибудь знает простой способ сделать это? Я хотел бы, например, растянуть второй столбец моей сетки, чтобы он соответствовал ширине сетки!


person Diogo Garcia    schedule 25.10.2011    source источник


Ответы (4)


Используйте свойство ColWidths, например:

with StringGrid1 do
  ColWidths[1] := ClientWidth - ColWidths[0] - 2 * GridLineWidth;

А для более надежного и гибкого решения примите во внимание все фиксированные столбцы и параметризируйте индекс столбца:

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;
person NGLN    schedule 25.10.2011
comment
Спасибо!! вот как это работает для меня: code procedure SetColumnFullWidth(Grid: TStringGrid; ACol: Integer); var I: Integer; FixedWidth: Integer; begin FixedWidth := 0; for I := 0 to Grid.ColCount - 1 do begin if(I=0) then begin Grid.ColWidths[I] := 50; FixedWidth := FixedWidth +50; end else begin Grid.ColWidths[I] := 100; FixedWidth := FixedWidth +100; end; end; Grid.ColWidths[ACol] := (Grid.Width-FixedWidth)+90; end; code - person Diogo Garcia; 25.10.2011

Решение Если есть сомнения, команда "grid.AutoFitColumns()", где сетка - это "TAdvStringGrid";

;)

person Peter Richard    schedule 16.06.2016

Следующий код работает с FixedCols = 0 (для адаптации к другим значениям, например: 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;
person Kaci    schedule 08.11.2018

еще лучше так:

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
        ColWidth := CellWidth
    end;
    Grid.ColWidths[Col] := ColWidth + MIN_COL_WIDTH;
  end;
end;
person Kaci    schedule 09.11.2018