鱼C论坛

 找回密码
 立即注册
查看: 470|回复: 1

[已解决]FMX里stringgrid的问题

[复制链接]
发表于 2023-1-8 15:39:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

1.stringgrid的visiblerows属性把底部只露出半截的格子也算进去了,是否有办法只算完整的格子,或如何设置行高使得上下两端刚好没有空白?
2.如何设置stringgrid的列宽度使得刚好占满整个stringgrid的宽度,不留空白也不出现滚动条?
求高手指点,谢谢!
最佳答案
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[i] := StringGrid1.DefaultRowHeight;
end;
此外,如果 StringGrid 的高度可以调整,则还需确保 StringGrid 控件的高度是该行高度的整数倍,以便字符串网格的顶部和底部没有空白。

2. 如果您想使用代码在运行时自动将列宽调整为适当的大小,以填充字符串网格并不留出空白,可以通过计算页面中可用像素并将其分配给每个列来实现这一点。以下是一个示例代码:
procedure TForm1.AutoSizeColumns(Grid: TStringGrid);
var
  ColWidth, TotalWidth, ExtraWidth, NumCols, Col: Integer;
begin
  TotalWidth := Grid.ClientWidth - Grid.RowHeights[0];
  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[Col] := ColWidth;
    if ExtraWidth > 0 then
    begin
      Grid.ColWidths[Col] := Grid.ColWidths[Col] + 1;
      Dec(ExtraWidth);
    end;
  end;
end;

// 在需要自动调整列宽的时候调用
AutoSizeColumns(StringGrid1);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[i] := StringGrid1.DefaultRowHeight;
end;
此外,如果 StringGrid 的高度可以调整,则还需确保 StringGrid 控件的高度是该行高度的整数倍,以便字符串网格的顶部和底部没有空白。

2. 如果您想使用代码在运行时自动将列宽调整为适当的大小,以填充字符串网格并不留出空白,可以通过计算页面中可用像素并将其分配给每个列来实现这一点。以下是一个示例代码:
procedure TForm1.AutoSizeColumns(Grid: TStringGrid);
var
  ColWidth, TotalWidth, ExtraWidth, NumCols, Col: Integer;
begin
  TotalWidth := Grid.ClientWidth - Grid.RowHeights[0];
  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[Col] := ColWidth;
    if ExtraWidth > 0 then
    begin
      Grid.ColWidths[Col] := Grid.ColWidths[Col] + 1;
      Dec(ExtraWidth);
    end;
  end;
end;

// 在需要自动调整列宽的时候调用
AutoSizeColumns(StringGrid1);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-7-3 02:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表