Я столкнулся с одной маленькой проблемой. Я динамически генерирую некоторые элементы управления и помещаю их в компонент 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;
Приведенный выше код показывает, как я прячу и показываю поле прокрутки.
fNaujasTermas
создает панель с несколькими трекбарами, изображениями и правками.
Я не уверен насчет того, какое может быть пошаговое объяснение. Просто создайте процедуру, в которой она сгенерирует панель с множеством элементов управления, и установите ScrollBox в качестве родительского элемента. Скройте прокрутку, прежде чем что-либо генерировать, и раскройте ее после того, как все сделано.
О, кстати, панель выровнена alTop
. Поэтому каждый раз, когда новая панель создается и помещается в поле прокрутки, она будет отображаться вверху, а все остальные панели будут перемещаться вниз.
Вот так я и создал саму прокрутку
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 пикселей в целом, на полосе прокрутки будет показана полоса прокрутки, которая выглядит так, как будто она прокручивается только на 2 панели, а не на 3. При попытке прокрутки такого окна значения пересчитываются, и все хорошо отображается.
Итак, основная проблема в том, как сделать так, чтобы полоса прокрутки показывала полосу прокрутки "вовремя", чтобы панели не были обрезаны наполовину?