Управление размерами элементов при изменении формы

Тема в разделе "Borland C++ Builder & Kylix", создана пользователем WishMaster, 14 апр 2006.

Статус темы:
Закрыта.
  1. WishMaster

    WishMaster Гость

    Казалось бы, тривиальная задача, но бьюсь над ее решением уже второй день и ничего не могу придумать! На форме лежит RichEdit, размазанный по нижнему краю формы (свойство Align = alBottom). Над ним лежит Splitter соответственно с таким же выравниванием, что позволяет изменять размеры RichEdit. Ключевой необходимостью является ограничение минимальной высоты как RichEdita, так и оставшейся пустой верхней области формы. Они не должны быть меньше 80 пикселов. Соблюдение необходимых ограничений при перетаскивании сплитера легко обеспечивается установлением его свойства MinSize равным 80. Все проблемы возникают при попытке соблюсти указанные ограничения при изменении высоты формы. Необходимо, чтобы несмотря на начальные значения высоты RichEdita и верхней области, при уменьшении формы они сначала уменшались обое пропорционально их высотам, когда высота одного станет <= 80 пикселам, форма продолжала уменьшатся за счет высоты другого, а когда и его высота достигнет ограничения, изменение высоты формы блокировалось. При увеличении высоты формы ситуация проще - обе области (RichEdit и пустая верхняя) должны увеличиваться пропорционально своим размерам. И, конечно же, желательно, чтобы при изменении размеров формы ничего не мерцало и не скакало туда-сюда.

    Проблема в том, что при уменьшении высоты формы обе области уменьшаются пропорционально, и если высота верхней пустой области была до уменьшения 80, то ограничить ее дальнейшее уменьшение не представляется возможным. Если же програмно ограничивать верхнюю границу RichEdit в событии OnCanResize, то возникает сильное мерцание в результате того, что RichEdit все таки накладывается на пустую область, а потом насильно возвращается назад.

    Еще раз - задача свиду кажется элементарной, но при практической реализации оказывается довольно сложной. По-крайней мере я уже все, что мог, перепробовал - не получилось. Кризис жанра.

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

    ПС. Пишу на C++ Builder 6, но это в даном контексте значения не имеет.
     
  2. Гость

    <!--QuoteBegin-WishMaster+14:04:2006, 13:06 -->
    <span class="vbquote">(WishMaster @ 14:04:2006, 13:06 )</span><!--QuoteEBegin-->Если же програмно ограничивать верхнюю границу RichEdit в событии OnCanResize, то возникает сильное мерцание в результате того, что RichEdit все таки накладывается на пустую область, а потом насильно возвращается назад.

    [snapback]33572" rel="nofollow" target="_blank[/snapback]​
    [/quote]

    Попробуйте вместо события OnCanResize использовать событие OnResize.

    Я решал подобную проблему на Builder 5-ке с количеством компонентов порядка 30 - кнопки, Edit-ы и др. В OnResize формы у меня был пересчет размеров и координат элементов в зависимости от новых размеров формы. Все выполнялось достаточно быстро - ничего не мерцало. :)
     
  3. WishMaster

    WishMaster Гость

Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей