Выравнивание компонентов на форме

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Выравнивание компонентов на форме

Сообщение alexs » 12.05.2014 15:45:40

Вопрос к общественности
Кто как производит выравнивание компонентов на формах?
У меня достаточно часто возникает потребность расположить строк ввода и меток к ним вертикально.
С помощью штатных привязок можно сделать привязку каждой метки к своему полю ввода. Но хочется чтобы выравнивание происходило сразу для всех элементов. Так как я не знаю какая метка будет самая широкая - очень сложно определить - где будут границы.
У меня сейчас возникает идея сделать дополнительный визуальный элемент (что-то вроде контейнера), в котором будут прописаны метки и он будет определять свою ширину в зависимости от максимальной ширины меток. Сам он будет не видимым.

Может есть что проще? И мне не стоит изобретать велосипед.
PS
Хочется именно визуальный метод - кодить такую мелочь каждый раз не вариант.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4051
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Выравнивание компонентов на форме

Сообщение mse » 13.05.2014 09:52:43

Just as a hint for a possible other approach: in MSEgui captions of widgets are part of the frame property. If tcaptionframe.options cfo_captiondistouter is set, "captiondist" defines the distance of the start of the caption to the widget frame.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
mse
новенький
 
Сообщения: 68
Зарегистрирован: 08.08.2013 15:40:31

Re: Выравнивание компонентов на форме

Сообщение qivi » 13.05.2014 10:27:44

Что бы под длину самого длинного лабеля, сложи все лабели на тпанель, им и ей включи авторесайз... тут возникает другая проблема как сопоставить метку и поле ввода(чтоб скажем поле не оказалась напротив не своей метки или между ними).

Я в случаях когда самый длинный лабель не прогнозируется отказываюсь от эстетики и привязываю каждое поле к своему лабелю.
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Выравнивание компонентов на форме

Сообщение alexs » 13.05.2014 13:46:56

mse
Это не то что мне надо. Мне надо выровнять все поля ввода относительно самой широкой метки.
Есть 4 поля и 4 метки. Ширина меток разная. Надо поля расположить ровно относительно самой широкой метки.
qivi
Я тоже над этим думал. И пришёл к этому же заключению.
Но хочется чтобы было красиво.

Ладно. Всем откликнувшимся - спасибо. Что либо придумаю. Если будет удачно - включу в RxFPC.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4051
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Выравнивание компонентов на форме

Сообщение mse » 13.05.2014 13:58:13

If the labels are elements of the widgets they need not to be aligned. Simply set "captiondist" of the widgets to the same value.
mse
новенький
 
Сообщения: 68
Зарегистрирован: 08.08.2013 15:40:31

Re: Выравнивание компонентов на форме

Сообщение alexs » 13.05.2014 15:32:13

mse
Мне кажется - ты меня не понял (или я не понял ответа).
Мне надо одинаково выравнять 4 разных Edit-a относительно 4-х разных меток по максимальной ширине меток
т.е. алгоритм такой должен быть:
Код: Выделить всё
  L:=Max(Label1.Width, Label2.Width, Label3.Width, Label4.Width);
  Edit1.Left:=L;
  Edit2.Left:=L;
  Edit3.Left:=L;
  Edit4.Left:=L;
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4051
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Выравнивание компонентов на форме

Сообщение GAMER » 14.05.2014 17:32:31

alexs писал(а):У меня сейчас возникает идея сделать дополнительный визуальный элемент (что-то вроде контейнера), в котором будут прописаны метки и он будет определять свою ширину в зависимости от максимальной ширины меток. Сам он будет не видимым.

Если Edit будет привязываться к правому краю этого элемента, то думаю, что это неплохой вариант.
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: Выравнивание компонентов на форме

Сообщение qivi » 22.01.2015 14:09:11

Предлагаю свой велосипед:
KMK.7z


Представляет собой визуальный контрол, наследника TWinControl, который будет находиться между контролами длина которых перемена и контролами которым нужно подстроится под самый длинный (из первой группы).

Свойство: AnchorKind - определяет которой стороной контрол будет "липнуть" к самой длинной метке. Далее в Items создаём список контролов длина которых перемена, так же у каждого итема есть свойство AnchorMount - определяет какую сторону контрола (ближнюю или дальнюю относительно AnchorKind) рассматривать для "прилипания". Ну и на последок контролы которые будут выравниваться по самому длинному из списка, привязываем к разделителю.
Вроде всё.

Ах да, там ещё маленькая демочка. Компилировать её нет смысла она наглядно работает в дизайнере форм.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Выравнивание компонентов на форме

Сообщение iN0k » 22.01.2015 14:41:05

Вот согласен
alexs писал(а):Хочется именно визуальный метод - кодить такую мелочь каждый раз не вариант.


Но против доп компонент (контейнеров и т.д.). каждый контрол это память (если скажете что я старый брюзга и живу в прошом веке, то наверно будете правы)

думал на счет кодоГенерации ... но пока показать нечего :-(
iN0k
постоялец
 
Сообщения: 146
Зарегистрирован: 18.07.2012 14:09:50

Re: Выравнивание компонентов на форме

Сообщение qivi » 22.01.2015 15:40:08

Но против доп компонент (контейнеров и т.д.). каждый контрол это память


Ну тут уж каждый решает сам. Мне то же как и топикстартеру доставляла неудобства данная проблема, я её решил как смог.
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Выравнивание компонентов на форме

Сообщение Onyma » 17.05.2017 18:00:37

Тема актуальна и будет актуальна еще долго... По этому вот ещё, более стандартное решение:
пкм на компоненте выбираем редактор привязок. там легко разобраться. Основывается это на свойстве визуальных компонентов AnchorSideLeft, AnchorSideTop и т.д.
Onyma
незнакомец
 
Сообщения: 1
Зарегистрирован: 17.05.2017 17:52:36


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 16

Рейтинг@Mail.ru