Я столкнулся с одной небольшой проблемой. Я динамически генерирую некоторые элементы управления и размещаю их на компоненте TScrollbox
. Но я заметил, что если видимость прокрутки видима, пользователь может четко видеть, как каждый из создаваемых и размещаемых элементов управления. Таким образом, похоже, что большая часть работы выполняется, и она медленная.Как показать полосы прокрутки в TScrollBox после того, как она снова стала видимой?
Я спрятал прокрутку и сгенерировал все элементы управления, которые занимали гораздо меньше времени и не мерцали и не похожи. Но вот проблема. Когда я снова показываю прокрутку, его «полоса прокрутки» не появляется, пока я не изменю размер формы. (Выравнивание прокрутки - alClient
)
Любые идеи о том, как исправить это?
Пробовал перекрашивать, но это не сработало. Обновление тоже не работает.
Спасибо
EDIT:
TScrollBox(Form1.FindComponent('termai')).Visible:= false;
for I := 0 to mazgas.GrafasPagalVarda(sActiveGrafas).Termai.Count - 1 do
begin
fNaujasTermas(i,oHook);
end;
TScrollBox(Form1.FindComponent('termai')).Visible := true;
Код выше показывает, как я скрыть и показать scrollbox.
fNaujasTermas
создает панель с несколькими трекболами, изображениями и изменениями.
Я не уверен, что поэтапное объяснение может быть. Просто создайте процедуру, в которой она создаст панель с большим количеством элементов управления и установите ScrollBox в качестве родителя. Скрывать прокрутку перед тем, как генерировать что-либо и отображать его после завершения.
Oh btw, панель выровнена alTop
. Поэтому каждый раз, когда новая панель создается и помещается в прокрутку, она появляется вверху, а все остальные панели будут двигаться вниз.
Это, как я создал scrollbox сам
pTermai := TScrollBox.Create(Self);
pTermai.Parent := pLeft;
pTermai.Align := alClient;
pTermai.Name := 'termai';
pTermai.BorderStyle := bsNone;
pTermai.VertScrollBar.Increment := 40;
EDIT2: Я думаю, что я знаю, как это воспроизвести.
Похоже, что при добавлении новой панели в прокрутку не учитывается ее общая высота всех элементов управления, которые уже находятся в этом прокрутке.
Так, чтобы привести пример. Скажем, 1 панель имеет высоту 200 пикселей.
ScrollBox высота 300 пикселей.
Итак, после создания 2 панелей, размер которых составляет до 400 пикселей, в прокрутке не отображаются полосы прокрутки, хотя половина второй панели не видна. Если я добавлю еще одну панель = всего 600 пикселей, scrollbox покажет полосу прокрутки, которая выглядит так, как будто она будет прокручиваться только на 2 панели, а не 3. При попытке прокрутки такого окна значения пересчитываются, и все отображается хорошо.
Итак, главная проблема заключается в том, как сделать прокрутку полосы прокрутки «во времени», чтобы панели не были наполовину срезаны?
Я не могу воспроизвести проблему в D2009. –