Перейти к содержанию
Fire Monkey от А до Я
  • 0

Горизонтальное выравнивание


d7d1cd

Вопрос

Доброго времени суток! На форме расположен TLayout. Установлены следующие свойства: Align = Bottom, Height = 50. Далее на него помещаются 5 кнопок все одинакового размера 40х40. Возможно ли только установкой свойств в инспекторе объектов сделать так, чтобы кнопки расположились горизонтально с равными промежутками в 20 пикселей и равномерно относительно центра TLayout? При изменении размеров формы указанное выравнивание должно сохраняться.

Ссылка на комментарий

Рекомендуемые сообщения

  • 0

Думаю, вам поможет TGridPanelLayout. Делаете один ряд с 5 колонками по 20% шириной. и внутри у каждого своего элемента делаете align=center и фиксированный размер 40х40. Это если я вас правильно понял.

Изменено пользователем xenon54
Ссылка на комментарий
  • 0

Думаю, вам поможет TGridPanelLayout. Делаете один ряд с 5 колонками по 20% шириной. и внутри у каждого своего элемента делаете align=center и фиксированный размер 40х40. Это если я вас правильно понял.

Ваш совет хорош. Однако расстояние между кнопками не равно 20 пикселей. При разных размерах формы оно разное.

Изменено пользователем d7d1cd
Ссылка на комментарий
  • 0

Ну если ваши кнопки должны растягиваться и расстояние должно оставаться между ними ровно 20 пикселей, то сделайте у всех кнопок align=client и margin(top=5,bottom=5,right/left=10 кроме первого и последнего).

Ссылка на комментарий
  • 0

Ну если ваши кнопки должны растягиваться и расстояние должно оставаться между ними ровно 20 пикселей, то сделайте у всех кнопок align=client и margin(top=5,bottom=5,right/left=10 кроме первого и последнего).

Нет, кнопки не должны растягиваться. Вот если необходимо чтобы кнопки были, например, справа и расстояние между ними 20, то я делаю у всех кнопок Align = Right, Margin->Left = 20. В результате они все аккуратненько стоят друг за другом в правой части родителя (TLayout). Если же сделать Align = Center, то все кнопки располагаются в центре друг на друге. При выравнивании справа, слева, сверху и снизу такого нет: они располагаются друг за другом. Почему выравнивание в центре располагает компоненты друг на друге?

Ссылка на комментарий
  • 0

 

Ну если ваши кнопки должны растягиваться и расстояние должно оставаться между ними ровно 20 пикселей, то сделайте у всех кнопок align=client и margin(top=5,bottom=5,right/left=10 кроме первого и последнего).

Нет, кнопки не должны растягиваться. Вот если необходимо чтобы кнопки были, например, справа и расстояние между ними 20, то я делаю у всех кнопок Align = Right, Margin->Left = 20. В результате они все аккуратненько стоят друг за другом в правой части родителя (TLayout). Если же сделать Align = Center, то все кнопки располагаются в центре друг на друге. При выравнивании справа, слева, сверху и снизу такого нет: они располагаются друг за другом. Почему выравнивание в центре располагает компоненты друг на друге?

 

Что-то не так делаете, при выравнивании в центре они должны норм ложиться.

Ссылка на комментарий
  • 0

Приложил тестовый проект. Задача: настроить свойство кнопок 1, 2, 3 так, чтобы при изменении размеров окна, а так же при изменении видимости каждой из кнопок группа этих кнопок всегда была в центре. Размер кнопок меняться не должен, расстояние между кнопками меняться не должно.

Test.zip

Изменено пользователем d7d1cd
Ссылка на комментарий
  • 0

 

Ну если ваши кнопки должны растягиваться и расстояние должно оставаться между ними ровно 20 пикселей, то сделайте у всех кнопок align=client и margin(top=5,bottom=5,right/left=10 кроме первого и последнего).

Нет, кнопки не должны растягиваться. Вот если необходимо чтобы кнопки были, например, справа и расстояние между ними 20, то я делаю у всех кнопок Align = Right, Margin->Left = 20. В результате они все аккуратненько стоят друг за другом в правой части родителя (TLayout). Если же сделать Align = Center, то все кнопки располагаются в центре друг на друге. При выравнивании справа, слева, сверху и снизу такого нет: они располагаются друг за другом. Почему выравнивание в центре располагает компоненты друг на друге?

 

Хоть и на делфи, но как-то так

Я так понял вы не в курсе зачем у контролов Margins )

У каждой кнопки Align - Client. А размеры сами подгоняйте, только не спрашивайте меня почему по бокам не ровно 50% )).

 

b81f23d4a7f5.jpg

Ссылка на комментарий
  • 0

rustam_d, спасибо за ответ и за картинки. Хочу обратить Ваше внимание на то, что я знаю что такое Margins. Кроме этого хочу сказать, что Ваше решение хорошо подходит для того случая, когда количество кнопок постоянно. Однако в моей программе количество кнопок не будет постоянным. Некоторые из них будут скрываться (отображаться) изменением свойства Visible. При этом группа кнопок, из какого бы количества она не состояла, должна оставаться в центре.

Ссылка на комментарий
  • 0
  • Модераторы

это делается так

  • TLayout = Top\Bottom
  •      TLayout = Center
  •            Button1 = Left\Right
  •            Button2 = Left\Right
  •            Button3 = Left\Right
  •            Button4 = Left\Right
  •            Button5 = Left\Right

center_demo.zip

Изменено пользователем ZuBy
Ссылка на комментарий
  • 0

rustam_d, Ваше решение хорошо подходит для того случая, когда количество кнопок постоянно. Однако в моей программе количество кнопок не будет постоянным. 

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

Ссылка на комментарий
  • 0

это делается так

  • TLayout = Top\Bottom
  •      TLayout = Center
  •            Button1 = Left\Right
  •            Button2 = Left\Right
  •            Button3 = Left\Right
  •            Button4 = Left\Right
  •            Button5 = Left\Right

attachicon.gifcenter_demo.zip

В этом случае, при скрытии одной или нескольких кнопок, остальные кнопки будут прижаты к одному краю (левому или правому). При этом группа видимых кнопок будет уже не по центру окна. Здесь есть решение: нужно ширину второго Layout-а всегда устанавливать равной суммарной ширине видимых кнопок. Но вот хотелось бы решение, когда настроил в инспекторе объектов и забыл, так сказать.

Ссылка на комментарий
  • 0

 

rustam_d, Ваше решение хорошо подходит для того случая, когда количество кнопок постоянно. Однако в моей программе количество кнопок не будет постоянным. 

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

 

И как же в Вашем примере можно сделать то, что мне надо?

Ссылка на комментарий
  • 0
  • Модераторы

 

это делается так

  • TLayout = Top\Bottom
  •      TLayout = Center
  •            Button1 = Left\Right
  •            Button2 = Left\Right
  •            Button3 = Left\Right
  •            Button4 = Left\Right
  •            Button5 = Left\Right

attachicon.gifcenter_demo.zip

В этом случае, при скрытии одной или нескольких кнопок, остальные кнопки будут прижаты к одному краю (левому или правому). При этом группа видимых кнопок будет уже не по центру окна. Здесь есть решение: нужно ширину второго Layout-а всегда устанавливать равной суммарной ширине видимых кнопок. Но вот хотелось бы решение, когда настроил в инспекторе объектов и забыл, так сказать.

 

все делается кодом, то что вы в инспекторе поставили не значит, что оно по волшебству работает. так что не ленитесь и делайте

Ссылка на комментарий
  • 0

все делается кодом, то что вы в инспекторе поставили не значит, что оно по волшебству работает. так что не ленитесь и делайте

Понятно, что кодом можно сделать все. Я думал можно через инспектор... Значит буду делать. Спасибо всем!

Изменено пользователем d7d1cd
Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...