Здравствуйте, ayap, Вы писали:
A>Есть следующая задачка:
A>Дан набор прямоугольных элементов пользовательского интерфейса, у которых определены некоторые параметры, а именно:
A>1) рекомендуемые длина и ширина
A>2) рекомендуемый способ расположения (горизонтальный или вертикальный)
A>Требуется: так расположить эти прямоугольники на заданной площади (окно программы, т.е. тоже прямоугольник), чтобы,
A>учитывая рекомендуемые параметры занять максимум полезной площади.
A>При этом можно менять реальные длину и ширину прямоугольников, но желательно учитывать их пропорцию.
Мало данных.
Пример -- берем контрол с наиболее совпадающими по пропорции размерами с заданной площадью и раздуваем практически на всю площадь.
В щели пихаем оставшиеся контролы, уменьшив их до неприличных размеров, естественно, сохраняя пропорции.
Надо дополнительные ограничения. Типа ограничение размеров сверху \ снизу, штраф за ресайз, в зависимости от его величины.
Да, кстати, ИМХО лучше все-таки ограничить промежутки допустимых высоты и ширины, ибо, если вздумается ресайзить заполненную площадь, то при предложенном варианте (жесткая пропорция) пропорция площади тоже будет жестко задана.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Здравствуйте, ayap, Вы писали:
A>Дан набор прямоугольных элементов пользовательского интерфейса, у которых определены некоторые параметры, а именно:
A>1) рекомендуемые длина и ширина
A>2) рекомендуемый способ расположения (горизонтальный или вертикальный)
A>Требуется: так расположить эти прямоугольники на заданной площади (окно программы, т.е. тоже прямоугольник), чтобы,
A>учитывая рекомендуемые параметры занять максимум полезной площади.
Требуется оторвать руки тому, кто поставил такую задачу. Представь себе, какое адское юзабилити будет у такой программы.
А тупое решение вот такое:
1) Берём виджет, пропорции которого наиболее близки к пропорциям окна; и растягиваем до упора.
2) Если осталась полоска нулевой толщины — то всех остальных масштабируем в ноль (у нас ведь не сказано, есть ли ограничение по размерам снизу).
3) Если полоска ненулевая — повторяем с ней и с оставшимися виджетами ту же процедуру.
Можно для эксперимента выполнить первую итерацию не с самым близким виджетом, а со всеми — и выбрать наилучший результат.
... << RSDN@Home 1.2.0 alpha rev. 655>>