了解ScrollBox Range

时间:2014-05-21 05:39:09

标签: delphi

我不明白如何调整滚动条的范围。说我有 image1 : TImage;组件中的TScrollingWinControl

现在开始我将range =设为组件的默认大小,如此。

  width := Image1.width ;
  height := Image1.Height;
  HorzScrollBar.Range := Image1.Width;  
  VertScrollBar.Range := Image1.Height;

到此为止我相信我很好。一切看起来都不错,没有滚动条会像我想的那样出现。现在我只使图像更大,但组件保持相同的大小,就像这样。

 Image1.height := Image1.Height +100;
 Image1.Width  := Image1.Width  +200;

现在我可以告诉我的图像更大,组件大小相同但滚动条从不显示。所以对于他们来说,我需要设置范围,这让我感到困惑

  1. 如果表单的垂直滚动条的范围设置为500,并且表单的高度为200,则滚动条的位置可以在0到300之间变化。
  2. 所以这里是我困惑的地方,我采取image1.height - 组件高度并将其设置为范围?或整个Image1.height和滚动条的范围减去?

1 个答案:

答案 0 :(得分:6)

当尺寸发生变化时,滚动框不会使其自身适应其内容。你必须这样做。毕竟,如果您希望滚动条仅将部分内容滚动到视图中,该怎么办?因此,您需要使Range属性与滚动框中包含的控件的尺寸保持同步。

来自documentation

  

Range表示关联控件的客户区的虚拟大小(以像素为单位)。

因此,您只需将Range属性设置为等于图像的大小即可。如果图像大小发生变化,则需要更新范围,如下所示:

HorzScrollBar.Range := Image1.Width;  
VertScrollBar.Range := Image1.Height;

文档继续说:

  

例如,如果表单的水平滚动条的范围设置为500,并且表单的宽度为200,则滚动条的位置可以在0到300之间变化。

你似乎对此感到困惑。我想你想知道为什么位置在0到300之间变化。当位置为0时,可见区域为0到200.当位置为300时,可见区域为300到500.因此覆盖了整个范围。但滚动框控件负责管理滚动条。您只需将范围设置为图像的大小即可。