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