如果在滚动表单时将控件放在错误位置,为什么这些控件位于错误的位置?

Rak*_*tti 5 delphi scrollbar form-design

考虑这个表单,标签为"Observer here"和一个"Click"按钮:

靠近表单左边缘的标签,带有一个按钮

点击按钮我将标签设置Left为10(Label1.Left :=10;)

我正如第二张图片中那样正确:

带有左边缘附近标签的表格

然后,我将表单滚动到右边:

与之前相同的形式,但向右滚动,以便隐藏标签

现在,点击按钮后我遇到了问题,如第4张图所示:

相同的形式,向左滚动,但标签在中间而不是左边可见

标签Left不再是10.它超过10,但我需要它10.我怎么能这样做?

Vib*_*nRC 6

Label1.Left:= 10; 意味着10从当前边界(form1.left)离开.

所以Label1.Left:= 10; 总是不会产生相同的结果,这取决于Form1.HorzScrollBar.Position ;

你必须像代码一样

Label1.Left := 10 - Form1.HorzScrollBar.Position  ;
Run Code Online (Sandbox Code Playgroud)

您可以通过选择form1中的组件并调整滚动条来看到设计时的这种模式,您可以注意到在对象Inspector中,当移动滚动条时,所选组件的左侧值也会发生变化

你可以这样理解它

如果你有HorzScrollBar然后如果添加组件并将其左值设置得非常高,则form1将不会增加其宽度,但由滚动条处理的虚拟宽度将增加,所有协调值将给出相对于form1的值与虚拟空间