От дълго време търся решение, но без успех. Някой знае ли прост начин да направите това? Бих искал да разтегна например втората колона на моята мрежа, за да пасне на ширината на мрежата!
Как да накарам колоните на StringGrid да отговарят на ширината на мрежата?
Отговори (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
Благодаря ти!! ето как работи при мен:
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
sourceforge.net/p/dzlib/ code/HEAD/tree/dzlib/trunk/src/
- person dummzeuch; 16.06.2016
Решение Ако има още съмнения команда "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