Как да накарам колоните на 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
comment

Решение Ако има още съмнения команда "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