鉴于我希望我的字符串网格具有相同的高度行...
我知道它将从5行开始,我在设计时就这样做了。
在运行时我可能想要添加一些额外的行(并且我的代码不会添加到父级底部之下;此时我依赖滚动条)。
似乎sg.height:= sg.height + sg.RowHeights [0];没有产生预期的结果 - 在最后一行之后有空洞的空白(我仍在尝试计算额外高度如何与行数相对应,但看起来它是一行的高度,无论多少行在网格中。)
还有什么我应该考虑的吗? (也许是GridLineWidth?)或者我可以在Object Inspector中错误地设置属性吗?我应该使用GridHeight
,而不是Height
吗?
注意:仅当stringgid与所有单元格一样宽并且出现滚动条时,才会出现此问题,从而绘制最后一列的一部分。如果我在字符串网格的右侧留下一个丑陋的空白sapce以使滚动条适合,则问题不会发生。
在添加多行后,有人能告诉我计算新网格高度的公式吗?或者我在做错事。
[更新] 3点的软糖因子对应margin
属性
答案 0 :(得分:1)
万一我以外的人都感兴趣,这就是我为了让它发挥作用所做的一切。
当找到一行时:
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;
答案 1 :(得分:1)
如果有任何价值,我会将您的试验和错误添加到您的研究中 。这是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加上顶部和底部线以及另外两个包含SnagIt的灰色线条的原因