mp654k 发表于 2023-1-8 15:39:59

FMX里stringgrid的问题


1.stringgrid的visiblerows属性把底部只露出半截的格子也算进去了,是否有办法只算完整的格子,或如何设置行高使得上下两端刚好没有空白?
2.如何设置stringgrid的列宽度使得刚好占满整个stringgrid的宽度,不留空白也不出现滚动条?
求高手指点,谢谢!

sfqxx 发表于 2023-5-29 19:42:38

本帖最后由 sfqxx 于 2023-5-29 20:42 编辑

1. 如果您想使 `VisibleRows` 属性只包含完整的行而不是半行,请尝试设置 `RowHeights` 属性,将所有行的高度都设置为相同的大小(例如:固定为默认行高 `DefaultRowHeight`)。

for i := 0 to StringGrid1.RowCount-1 do
begin
StringGrid1.RowHeights := StringGrid1.DefaultRowHeight;
end;
此外,如果 StringGrid 的高度可以调整,则还需确保 StringGrid 控件的高度是该行高度的整数倍,以便字符串网格的顶部和底部没有空白。

2. 如果您想使用代码在运行时自动将列宽调整为适当的大小,以填充字符串网格并不留出空白,可以通过计算页面中可用像素并将其分配给每个列来实现这一点。以下是一个示例代码:

procedure TForm1.AutoSizeColumns(Grid: TStringGrid);
var
ColWidth, TotalWidth, ExtraWidth, NumCols, Col: Integer;
begin
TotalWidth := Grid.ClientWidth - Grid.RowHeights;
NumCols := Grid.ColCount - Grid.FixedCols;

ColWidth := Trunc(TotalWidth / NumCols);
ExtraWidth := TotalWidth - (ColWidth * NumCols);

for Col := Grid.FixedCols to Grid.ColCount - 1 do
begin
    Grid.ColWidths := ColWidth;
    if ExtraWidth > 0 then
    begin
      Grid.ColWidths := Grid.ColWidths + 1;
      Dec(ExtraWidth);
    end;
end;
end;

// 在需要自动调整列宽的时候调用
AutoSizeColumns(StringGrid1);
页: [1]
查看完整版本: FMX里stringgrid的问题