Полосы прокрутки и выравнивание по отношению к клиенту во вложенной форме

#delphi

#delphi

Вопрос:

В моем приложении есть форма, которая используется для разработки других форм и содержит инспектор объектов (ниже приведена базовая схема ascii)

 -----------------------
|obj | design forms   | 
|insp| here           |
|    |                |
-----------------------
  

итак, основная форма приложения содержит форму объекта и другую форму, в которую можно размещать компоненты (вверху также есть панель инструментов для выбора компонентов, но я этого не показывал).

Теперь, если я увеличу основную форму, я бы хотел, чтобы содержимое расширилось, чтобы соответствовать ей…

 -------------------------------
|obj | design forms           | 
|insp| here                   |
|    |                        |
|    |                        |
|    |                        |
-------------------------------
  

итак, моя форма «конструктор форм» имеет Align := alClient;

но, если я размещу на нем компонент так, чтобы он перекрывал край…

 -------------------------------
|obj | design forms           | 
|insp| here              -----------
|    |                   |component|
|    |                   -----------
|    |                        |
-------------------------------
  

экран, конечно, показывает

 -------------------------------
|obj | design forms           |
|insp| here              -----|
|    |                   |comp|
|    |                   -----|
|    |                        |
-------------------------------
  

и я хотел бы автоматическую полосу прокрутки.

Но, похоже, что Align := alClient; переопределяет автоматическую прокрутку:= true;

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

ИЛИ я полностью упускаю суть? У меня есть код, который обрабатывает размещение компонента — должен ли я проверять там, нужно ли мне добавлять полосы прокрутки?

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

1. Какого типа компонент контейнера, который содержит содержимое разрабатываемой формы? Я думаю, что стандарт TScrollBox ведет себя так, как вы хотите.

2. 1 для 1 для ascii-кода 😉

3. 1 для «какого типа?». В конечном счете это происходит от TScrollingWinControl

Ответ №1:

Я думаю, что относительно простым решением было бы переключить форму Align на alNone и расположить и изменить ее размер в событии изменения размера родительской формы. Предположительно, у вас там есть разделитель, события размера которого вам также придется прослушивать.

Пока у вас есть только инспектор и форма проектирования, это довольно простое решение для реализации. Если у вас там будет больше окон инструментов, это будет сложнее, но основную идею можно расширить.

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

1. 1 Да, есть разделитель, и это звучит как отличное решение. Я исправлю это и свяжусь с вами. Спасибо

2. @Mawg: Однажды я оставил хвалебный комментарий, подразумевающий, что я также поддержал ответ, который я комментировал. Позже выяснилось, что мне на самом деле не удалось повысить голос. Похоже, на этот раз с вами произошло то же самое. Это или ваш комментарий был предназначен для совершенно другого ответа, который, как оказалось, тоже касался какого-то разделителя (возможно, временного разделителя), и он попал сюда по какой-то ошибке. 🙂

3. 1 за ваш ответ и 1 за ваш комментарий. Извините за это. Это займет некоторое время, чтобы закодировать это, поэтому я пока не буду присуждать ответ, на случай, если кто-то каким-то образом опубликует лучший ответ — но я не задерживаю дыхание. Спасибо, что направили меня в правильном направлении

4. Проблема в том, что я хочу, чтобы вложенная форма могла быть больше основной формы или даже монитора, путем добавления к ней полос прокрутки, поэтому я не могу просто изменить ее размер. Мне действительно нужны полосы прокрутки.

5. @Mawg У меня, кажется, все работает нормально. Но я ищу полосы прокрутки в форме дизайна, а не в общем контейнере. Где вы хотите, чтобы полосы прокрутки были?