0

鉴于我希望我的字符串网格具有相同高度的行......

我知道它将从 5 行开始,我在设计时就这样做了。

在运行时,我可能想要添加一些额外的行(并且我有代码不要添加到父级的底部下方;那时我依赖滚动条)。

似乎 sg.height := sg.height + sg.RowHeights[0]; 没有产生预期的结果 - 最后一行之后有意外的空白(我仍在尝试计算额外的高度如何对应于行数,但看起来它是一行的高度,不管有多少行在网格中)。

还有什么我应该考虑的吗?(也许是 GridLineWidth?)或者我是否在对象检查器中错误地设置了一个属性?我应该使用GridHeight,而不是Height

注意:此问题仅在 stringgid 与所有单元格一样宽并且出现滚动条并覆盖最后一列的一部分时才会出现。如果我在字符串网格的右侧留下一个丑陋的空白空间以适应滚动条,则不会出现问题。

谁能告诉我添加多行后计算新网格高度的公式?或者我做错了什么。


[更新] 3 aap的软糖因子对应margin属性

4

2 回答 2

2

以防万一除我之外的任何人感兴趣,这就是我为使其正常工作所做的工作。

添加一行时:

newHeight := stringGrid.Height + 
             stringGrid.RowHeights[Pred(stringGrid.Row)] + 
             stringGrid.GridLineWidth;  

if newHeight < maxheight then
   stringGrid.Height := newHeight;

stringGrid.RowCount := stringGrid.RowCount + 1;

或者,我可以保留它,直到我添加了所有行,然后

stringGrid.Height := ((stringGrid.RowHeights[1] + stringGrid.GridLineWidth) *              
                      (stringGrid.VisibleRowCount + stringGrid.FixedRows)) + 3;
于 2012-10-30T04:54:34.440 回答
1

如果它有任何价值,我会将我的试验和错误添加到您的研究中。
TMS AdvStringGrid. 这是 TMS AdvStringGrid 的图像。我认为它主要基于具有许多有用扩展的普通字符串网格。为了更容易计算行数,我使用 SnagIt 放大了图像并使像素网格线可见。我在网格的第一行添加了一些红线。在此网格上,DefaultRowHeight 设置为 21。在红线之间,每条线有 5 个像素,因此要为 DefaultRowHeight 获得 21 个像素,您必须包括高度为 1 像素的 stringgrid 网格线。当我加载这个网格时,我使用这个代码:

with gridLimits do
    begin
      RowCount := 3;
      Cells[0, 0] := 'Maximum Amount';
      Cells[0, 1] := 'Maximum Base';
      Cells[0, 2] := 'Maximum Period';
      IntegralHeight := False;
      MyHeight := 0;
      for i := 0 to RowCount - 1 do
        inc(MyHeight, RowHeights[i]);
      Height := MyHeight + 5;
    end;
end;

我使用 SnagIt 捕获网格并让它捕获屏幕上的对象。它包括网格周围的 1 像素灰线。网格实际上似乎从蓝线开始,所以要获得高度,我想我需要将 DefaultRowHeight 乘以三加上顶部蓝线加上底部蓝线,但如果我这样做并单击底行,网格向上滚动。如果我将 3 添加到高度,它也会向上滚动。如果我将 4 添加到高度,它不会滚动。我不知道为什么我将它设置为 5,我现在将其设置为 4,因为您可以看到底部有 1 个像素太多。

可能应该添加顶部和底部灰线以获得网格的总高度,这就是为什么它是 DefaultRowHeight 乘以 3 加上顶部和底部线加上另外 2 条用于 SnagIt 包含的灰色线。

于 2012-10-30T17:53:11.613 回答