Кажется, это очень простая проблема, но я не могу заставить прокрутку отображать полосы прокрутки, и это сводит меня с ума.
Вот ситуация.Мне нужно отобразить переменное количество кадров в части формы.Размер области, в которой отображаются эти кадры, можно изменить с помощью TSplitter или путем изменения размера формы.
Я динамически генерирую кадры на основе записей в базе данных при создании формы.Эти кадры связаны с FlowPanel, которая отвечает за размещение кадров.FlowPanel находится в ScrollBox.
Из-за FlowPanel, когда пользователь использует TSplitter или изменяет размеры формы, кадры могут перестраиваться.Если какой-либо из кадров переместится из вида формы, я ожидаю, что ScrollBox отобразит полосы прокрутки, чтобы пользователь мог прокрутить вниз до этих недоступных кадров.Такого не бывает.Те кадры, которые находятся в области панели потока за пределами размеров поля прокрутки, недоступны.
Я построил несколько тестов с простыми объектами в коробке прокрутки, и коробка прокрутки правильно размещает полосы прокрутки, если какой-либо из его содержащихся объектовпоявляются за пределами размеров прокрутки.
Неважно, выровнена ли панель потока по clClient (поле прокрутки) или закреплена по сторонам прокрутки, или ничего из этого.
Я понимаю,что я могу вместо этого использовать TPanel и выполнить размещение и изменение положения кадров в коде из обработчика события OnResize панели, но для этого предназначен FlowPanel.
Что здесь происходит?Я возился со многими различными свойствами прокрутки, но все еще не могу заставить его работать.В чем проблема, и есть ли решение?
Хорошо.Я выбираю ответ Эве как правильный, но хитрость в создании этой работы была в одном из его комментариев, и я все еще не полностью удовлетворен результатами.
Вот совок.У меня были ScrollBox и FlowPanel, настроенные так, как предлагал Эве, но я поиграл с рядом других настроек, потому что эта конфигурация не работала.Я почти уверен, что это произошло из-за сложности пользовательского интерфейса формы, который имеет много панелей в панелях, много разделителей, а сама форма заключена в TabSheet of PageControl (я опускал этот факт, так как тестировал форму как подставкуодна форма дала те же результаты).
То, что заставило ее работать, хотя и неуклюже, было предложением Эве выключить и снова включить AutoWrap FlowPanel.Я добавил следующий код в обработчик события OnResize объекта ScrollBox:
procedure TCurrentJobsForm.ScrollBox1Resize(Sender: TObject);
begin
Flowpanel1.Autowrap := False;
FlowPanel1.AutoWrap := True;
end;
При изменении размера наблюдается заметное мерцание, но я могу с этим смириться, поскольку он дает желаемый результат.Как только пользователь изменяет размеры формы, она всегда будет воссоздана с использованием этих измерений, поэтому изменение размера - это то, что пользователь будет делать редко.