如何显示TScrollBox滚动条已经可见后再次?
-
27-09-2019 - |
题
我碰到一个小问题。我动态生成一些控制,并把它们放在一个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
生成具有几个trackbars,图像和编辑的面板。
我不知道什么一步一步的解释可能存在。只是做一个程序,其中会产生一些面板上面有许多控件,并设置滚动框作为父母。生成任何东西之前和取消隐藏这一切完成后隐藏滚动框。点击
哦顺便说一句,面板对准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个板,其加起来的高度的400像素后,滚动框不显示滚动条,即使第二面板的一半是不可见的。如果我添加一个面板= 600px的总,滚动框将显示滚动条看上去像将每2个面板滚动,而不是3。当试图滚动这样的窗口,得到的值重新计算,一切都很好地示出。
所以,主要的问题是,如何让“时间”一个滚动框显示滚动所以没有面板是半切?
解决方案
可以请求滚动框通过调用它从Realign()
继承TWinControl
方法来重新计算其滚动条的属性。为了尽量减少闪烁,你应该这样做,而它仍然是看不见的,就像这样:
ScrollBox.Visible := False;
try
// create your new panel ...
finally
ScrollBox.Realign;
ScrollBox.Visible := True;
end;
其他提示
正如我在评论中说,我无法重现该问题。如果您对如何重现问题一步一步的指示,这将有助于。
但是,如果你说的那个问题消失,如果你调整的形式,为什么不直接调整的形式?也许你可以尝试调整它使用SetWindowPos
0像素。您也可以尝试ScrollBox1.Perform(WM_VSCROLL, SB_PAGEUP, 0);
。