Rusland Опубликовано 18 августа, 2016 Поделиться Опубликовано 18 августа, 2016 На Layout-е лежат кнопки TButton и один TComboEdit (у всех Align Left или Right). Когда экран устройства слишком маленький или если перевернуть устройство в портретный режим, то все в Layout не помещается и начинает накладываться друг на друга. Хочу задавать ширину компонент в зависимости от ширины лейаута. Как это сделать? Пытаюсь делать так: BtnsWidth:integer; //суммарная ширина всех кнопок на лейауте BtnsCnt:integer; // количество кнопок if BtnsWidth>Layout1.Width then begin BtnsWidth:=Round(Layout1.Width/BtnsCnt); // присваиваю средний размер кнопок for i:=0 to Layout1.ComponentCount-1 do begin if (Layout1.Components[i] is TButton) or (Layout1.Components[i] is TComboEdit) then if (TControl(Layout1.Components[i]).Visible) then TControl(Layout1.Components[i]).Width:=BtnsWidth; end; end; Так вот Layout1.ComponentCount равен 0, хотя на нем расположены кнопки и ComboEdit. Цитата Ссылка на комментарий
POV Опубликовано 18 августа, 2016 Поделиться Опубликовано 18 августа, 2016 Попробовал... хы, они посчитались вместе с Layout в ComponentCount формы )) Т.е. Form1.ComponentCount равен 3 Цитата Ссылка на комментарий
POV Опубликовано 18 августа, 2016 Поделиться Опубликовано 18 августа, 2016 А чем плох Align = Scale? Rusland 1 Цитата Ссылка на комментарий
Rusland Опубликовано 18 августа, 2016 Автор Поделиться Опубликовано 18 августа, 2016 Переделал Если сделать вот так, то работает: BtnsWidth:=Round(Layout1.Width/BtnsCnt); for i:=0 to ComponentCount-1 do begin if (Components[i] is TButton) or (Components[i] is TComboEdit) then if (TControl(Components[i]).Visible) and ((TControl(Components[i]).ParentControl as TLayout)=Layout1) then TControl(Components[i]).Width:=BtnsWidth; end; PS. Все-таки не понимаю почему родителем кнопок является не Layout, а форма. Цитата Ссылка на комментарий
enatechno Опубликовано 18 августа, 2016 Поделиться Опубликовано 18 августа, 2016 (изменено) 27 минут назад, Rusland сказал: PS. Все-таки не понимаю почему родителем кнопок является не Layout, а форма. Родителем (Parent) является Layout. А Owner у Ваших контролов - форма. ComponentCount считается для Owner. Создавая кнопки в runtime можете задать: aButton := TButton.Create(Layout1); Layout1.Add(aButton); и тогда Layout1.ComponentCount уже не будет равно 0. Для перебора в Parent используйте ChildrenCount for i:=0 to Layout1.ChildrenCount-1 do begin if (Layout1.Children[i] is TButton) or (Layout1.Children[i] is TLabel) then if (TControl(Layout1.Children[i]).Visible) then TControl(Layout1.Children[i]).Width:=50; end; Изменено 18 августа, 2016 пользователем enatechno Brovin Yaroslav и Rusland 2 Цитата Ссылка на комментарий
Rusland Опубликовано 18 августа, 2016 Автор Поделиться Опубликовано 18 августа, 2016 1 минуту назад, POV сказал: А чем плох Align = Scale? Никогда не использовал. Как оно работает? Цитата Ссылка на комментарий
POV Опубликовано 18 августа, 2016 Поделиться Опубликовано 18 августа, 2016 Накидал компоненты на форму как тебе нравится и задал всем это свойство. При изменении размеров формы всё пропорционально масштабируется. Rusland и Камышев Александр 2 Цитата Ссылка на комментарий
Камышев Александр Опубликовано 19 августа, 2016 Поделиться Опубликовано 19 августа, 2016 (изменено) 16 часов назад, POV сказал: Накидал компоненты на форму как тебе нравится и задал всем это свойство. При изменении размеров формы всё пропорционально масштабируется. Align = Scale - удачный выбор, в oldschool Delphi и CBuilder такого не было, в Anchors выставляли руками масштабирование. Кстати, если кнопки надо изменять только в ширину, то это в Anchors Изменено 19 августа, 2016 пользователем Камышев Александр Rusland 1 Цитата Ссылка на комментарий
krapotkin Опубликовано 19 августа, 2016 Поделиться Опубликовано 19 августа, 2016 а почему простой Align не используется? обычно для резиновой верстки его хватает Цитата Ссылка на комментарий
Rusland Опубликовано 19 августа, 2016 Автор Поделиться Опубликовано 19 августа, 2016 (изменено) Попробовал с Align=Scale - работает! Расставил в тестовом проекте компоненты как нравится, размеры меняются автоматически и никого кода писать не надо. Хотя в моем случае некоторые кнопки то видны, то нет (меняю свойство Visible). Не знаю как будет в этом случае. Изменено 19 августа, 2016 пользователем Rusland Цитата Ссылка на комментарий
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.