use*_*105 3 delphi delphi-2009 tscrollbox
我遇到了一个小问题.我正在动态生成一些控件并将它们放在一个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;
Run Code Online (Sandbox Code Playgroud)
上面的代码显示了我如何隐藏和显示滚动框.
fNaujasTermas生成一个包含多个轨迹栏,图像和编辑的面板.
我不确定可能会有一步一步的解释.只需创建一个过程,它将生成一些带有许多控件的面板,并将ScrollBox设置为父级.在生成任何内容之前隐藏滚动框,并在完成后取消隐藏它.
哦顺便说一句,面板是对齐的alTop.因此,每次创建新面板并将其放入滚动框时,它将显示在顶部,而所有其他面板将向下移动.
这就是我创建滚动条本身的方式
pTermai := TScrollBox.Create(Self);
pTermai.Parent := pLeft;
pTermai.Align := alClient;
pTermai.Name := 'termai';
pTermai.BorderStyle := bsNone;
pTermai.VertScrollBar.Increment := 40;
Run Code Online (Sandbox Code Playgroud)
EDIT2:我想我知道如何重现这一点.
看起来,当向滚动框添加新面板时,它不会将其计入已存在于该滚动框中的所有控件的总高度.
所以举个例子.让我们说1面板的高度为200px.
ScrollBox高度为300px.
因此,在创建2个高度为400px的面板后,即使第二个面板的一半不可见,滚动框也不会显示滚动条.如果我再添加一个面板= 600px,滚动条将显示滚动条,看起来它只会滚动每2个面板,而不是3.当尝试滚动这样的窗口时,值会重新计算,一切都很好地显示.
所以主要的问题是,如何使滚动条"及时"显示滚动条,这样没有面板被切成一半?
您可以通过调用Realign()它继承的方法请求滚动框重新计算其滚动条属性TWinControl.为了最大限度地减少闪烁,你应该在它仍然不可见时执行此操作,如下所示:
ScrollBox.Visible := False;
try
// create your new panel ...
finally
ScrollBox.Realign;
ScrollBox.Visible := True;
end;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7586 次 |
| 最近记录: |