Почему мой TScrollBox не показывает полосы прокрутки?

Это кажется очень простой проблемой, но я не могу получить полосу прокрутки для отображения полос прокрутки, и это сводит меня с ума.

Вот ситуация. Мне нужно отобразить переменное количество кадров в части формы. Размер области, в которой отображаются эти кадры, можно изменить либо с помощью 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;

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

7
задан Cary Jensen 28 January 2012 в 21:54
поделиться