Почему элементы управления не в том месте, если они расположены во время прокрутки формы?

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

метка возле левого края формы с кнопкой

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

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

форма с надписью возле левого края

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

та же форма, что и раньше, но прокрутка вправо, поэтому метка скрыта

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

та же форма, прокрутка влево, но метка видна около середины, а не слева

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

1 ответ

Label1.Left:= 10; Значит 10 слева от текущей границы (form1.left).

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

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

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

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

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

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

Другие вопросы по тегам