Почему элементы управления не в том месте, если они расположены во время прокрутки формы? - PullRequest
5 голосов
/ 20 октября 2011

Рассмотрите эту форму с надписью «Наблюдатель здесь» и кнопкой «Клик»:

a label near the left edge of the form, with a button

При нажатии кнопки я устанавливаю Left для метки 10 (Label1.Left :=10;)

Я получаю правильно, как на втором изображении:

form with label near left edge

Затем прокручиваю форму вправо:

same form as before, but scrolled right so label is hidden

Теперь, после нажатия кнопки, я получаю проблему, которая показана на 4-м изображении:

same form, scrolled left, but label visible near middle instead of left

Ярлык Left больше не равен 10. Это больше 10, но мне нужно, чтобы было 10. Как я могу это сделать?

1 Ответ

6 голосов
/ 20 октября 2011

Label1.Left: = 10;Означает 10 слева от границы current (form1.left).

т. Label1.Left: = 10;не будет всегда давать один и тот же результат, это зависит от Form1.HorzScrollBar.Position ;

Вы должны кодировать как

Label1.Left := 10 - Form1.HorzScrollBar.Position  ;

Вы можете увидеть этот шаблон во время разработки, выбрав компонент в вашей форме1 иОтрегулировав полосу прокрутки, вы можете заметить, что в объекте инспектора левое значение выбранного компонента также изменится при перемещении полосы прокрутки

Вы можете понять это так

Если у вас есть HorzScrollBar, то, если вы добавите компоненты и установите их левое значение очень высоким, форма1 не будет увеличивать свою ширину, но ее виртуальная ширина, обрабатываемая полосой прокрутки, увеличится, все значения координации приведут к значению относительно формы1, не связанной свиртуальное пространство

...