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

#delphi #scrollbar

#delphi #полоса прокрутки

Вопрос:

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

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

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

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

форма с меткой у левого края

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

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

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

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

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

Ответ №1:

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

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

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

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

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

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

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

Комментарии:

1. обратитесь books.google.lk /…

2. Кто-нибудь может сказать мне, используется ли тот же шаблон в Visual Studio winforms.

3. @rakesh если вы считаете, что это тот ответ, который вы хотели, вы можете принять это как решение или вы можете дать некоторые отзывы

4. 1 Это действительно кажется правильным ответом. Этого я никогда не знал до сегодняшнего дня!