Выравнивание компонентов на форме
Модератор: Модераторы
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
Выравнивание компонентов на форме
Вопрос к общественности
Кто как производит выравнивание компонентов на формах?
У меня достаточно часто возникает потребность расположить строк ввода и меток к ним вертикально.
С помощью штатных привязок можно сделать привязку каждой метки к своему полю ввода. Но хочется чтобы выравнивание происходило сразу для всех элементов. Так как я не знаю какая метка будет самая широкая - очень сложно определить - где будут границы.
У меня сейчас возникает идея сделать дополнительный визуальный элемент (что-то вроде контейнера), в котором будут прописаны метки и он будет определять свою ширину в зависимости от максимальной ширины меток. Сам он будет не видимым.
Может есть что проще? И мне не стоит изобретать велосипед.
PS
Хочется именно визуальный метод - кодить такую мелочь каждый раз не вариант.
Кто как производит выравнивание компонентов на формах?
У меня достаточно часто возникает потребность расположить строк ввода и меток к ним вертикально.
С помощью штатных привязок можно сделать привязку каждой метки к своему полю ввода. Но хочется чтобы выравнивание происходило сразу для всех элементов. Так как я не знаю какая метка будет самая широкая - очень сложно определить - где будут границы.
У меня сейчас возникает идея сделать дополнительный визуальный элемент (что-то вроде контейнера), в котором будут прописаны метки и он будет определять свою ширину в зависимости от максимальной ширины меток. Сам он будет не видимым.
Может есть что проще? И мне не стоит изобретать велосипед.
PS
Хочется именно визуальный метод - кодить такую мелочь каждый раз не вариант.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
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.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Что бы под длину самого длинного лабеля, сложи все лабели на тпанель, им и ей включи авторесайз... тут возникает другая проблема как сопоставить метку и поле ввода(чтоб скажем поле не оказалась напротив не своей метки или между ними).
Я в случаях когда самый длинный лабель не прогнозируется отказываюсь от эстетики и привязываю каждое поле к своему лабелю.
Я в случаях когда самый длинный лабель не прогнозируется отказываюсь от эстетики и привязываю каждое поле к своему лабелю.
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
mse
Это не то что мне надо. Мне надо выровнять все поля ввода относительно самой широкой метки.
Есть 4 поля и 4 метки. Ширина меток разная. Надо поля расположить ровно относительно самой широкой метки.
qivi
Я тоже над этим думал. И пришёл к этому же заключению.
Но хочется чтобы было красиво.
Ладно. Всем откликнувшимся - спасибо. Что либо придумаю. Если будет удачно - включу в RxFPC.
Это не то что мне надо. Мне надо выровнять все поля ввода относительно самой широкой метки.
Есть 4 поля и 4 метки. Ширина меток разная. Надо поля расположить ровно относительно самой широкой метки.
qivi
Я тоже над этим думал. И пришёл к этому же заключению.
Но хочется чтобы было красиво.
Ладно. Всем откликнувшимся - спасибо. Что либо придумаю. Если будет удачно - включу в RxFPC.
If the labels are elements of the widgets they need not to be aligned. Simply set "captiondist" of the widgets to the same value.
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
mse
Мне кажется - ты меня не понял (или я не понял ответа).
Мне надо одинаково выравнять 4 разных Edit-a относительно 4-х разных меток по максимальной ширине меток
т.е. алгоритм такой должен быть:
Мне кажется - ты меня не понял (или я не понял ответа).
Мне надо одинаково выравнять 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;
- GAMER
- энтузиаст
- Сообщения: 627
- Зарегистрирован: 06.08.2008 13:41:07
- Откуда: Ужгород-Днепр, Украина
- Контактная информация:
alexs писал(а):У меня сейчас возникает идея сделать дополнительный визуальный элемент (что-то вроде контейнера), в котором будут прописаны метки и он будет определять свою ширину в зависимости от максимальной ширины меток. Сам он будет не видимым.
Если Edit будет привязываться к правому краю этого элемента, то думаю, что это неплохой вариант.
Предлагаю свой велосипед:
Представляет собой визуальный контрол, наследника TWinControl, который будет находиться между контролами длина которых перемена и контролами которым нужно подстроится под самый длинный (из первой группы).
Свойство: AnchorKind - определяет которой стороной контрол будет "липнуть" к самой длинной метке. Далее в Items создаём список контролов длина которых перемена, так же у каждого итема есть свойство AnchorMount - определяет какую сторону контрола (ближнюю или дальнюю относительно AnchorKind) рассматривать для "прилипания". Ну и на последок контролы которые будут выравниваться по самому длинному из списка, привязываем к разделителю.
Вроде всё.
Ах да, там ещё маленькая демочка. Компилировать её нет смысла она наглядно работает в дизайнере форм.
Представляет собой визуальный контрол, наследника TWinControl, который будет находиться между контролами длина которых перемена и контролами которым нужно подстроится под самый длинный (из первой группы).
Свойство: AnchorKind - определяет которой стороной контрол будет "липнуть" к самой длинной метке. Далее в Items создаём список контролов длина которых перемена, так же у каждого итема есть свойство AnchorMount - определяет какую сторону контрола (ближнюю или дальнюю относительно AnchorKind) рассматривать для "прилипания". Ну и на последок контролы которые будут выравниваться по самому длинному из списка, привязываем к разделителю.
Вроде всё.
Ах да, там ещё маленькая демочка. Компилировать её нет смысла она наглядно работает в дизайнере форм.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Вот согласен
Но против доп компонент (контейнеров и т.д.). каждый контрол это память (если скажете что я старый брюзга и живу в прошом веке, то наверно будете правы)
думал на счет кодоГенерации ... но пока показать нечего
alexs писал(а):Хочется именно визуальный метод - кодить такую мелочь каждый раз не вариант.
Но против доп компонент (контейнеров и т.д.). каждый контрол это память (если скажете что я старый брюзга и живу в прошом веке, то наверно будете правы)
думал на счет кодоГенерации ... но пока показать нечего
Но против доп компонент (контейнеров и т.д.). каждый контрол это память
Ну тут уж каждый решает сам. Мне то же как и топикстартеру доставляла неудобства данная проблема, я её решил как смог.
Тема актуальна и будет актуальна еще долго... По этому вот ещё, более стандартное решение:
пкм на компоненте выбираем редактор привязок. там легко разобраться. Основывается это на свойстве визуальных компонентов AnchorSideLeft, AnchorSideTop и т.д.
пкм на компоненте выбираем редактор привязок. там легко разобраться. Основывается это на свойстве визуальных компонентов AnchorSideLeft, AnchorSideTop и т.д.
