我遇到了一个小问题。我正在动态生成一些控件并将它们放在一个TScrollbox
组件上。但我注意到,如果滚动框可见,用户可以清楚地看到正在创建和放置的每个控件。所以看起来有很多工作正在完成,而且速度很慢。
我隐藏了滚动框并在其上生成了所有控件,这花费了更少的时间并且没有闪烁等。但这就是问题所在。当我再次显示滚动框时,它的滚动条在我实际调整表单大小之前不会出现。(滚动框的对齐方式是alClient
)
有想法该怎么解决这个吗?
尝试重新粉刷,但没有成功。刷新也没有用。
谢谢
编辑:
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 像素。
滚动框高度为 300 像素。
因此,在创建 2 个总高度为 400px 的面板后,滚动框不会显示滚动条,即使第二个面板的一半不可见。如果我再添加一个面板 = 总共 600 像素,滚动框将显示滚动条,看起来它只会滚动每 2 个面板,而不是 3 个。当尝试滚动这样的窗口时,值会重新计算并且一切都很好地显示。
所以主要问题是,如何让滚动框“及时”显示滚动条,这样面板就不会被切掉一半?