了解ScrollBox Range

Gle*_*rse 1 delphi

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

现在开始我将range =设置为组件的默认大小,就像这样.

  width := Image1.width ;
  height := Image1.Height;
  HorzScrollBar.Range := Image1.Width;  
  VertScrollBar.Range := Image1.Height;
Run Code Online (Sandbox Code Playgroud)

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

 Image1.height := Image1.Height +100;
 Image1.Width  := Image1.Width  +200;
Run Code Online (Sandbox Code Playgroud)

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

  1. 如果窗体的垂直滚动条的范围设置为500,并且窗体的高度为200,则滚动条的位置可以在0到300之间变化.

所以这里是我困惑的地方,我采取image1.height - 组件高度并将其设置为范围?或整个Image1.height和滚动条的范围减去?

Dav*_*nan 6

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

从文档:

范围表示关联控件的客户端区域的虚拟大小(以像素为单位).

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

HorzScrollBar.Range := Image1.Width;  
VertScrollBar.Range := Image1.Height;
Run Code Online (Sandbox Code Playgroud)

文档继续说:

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

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