我碰到一个小问题。我动态生成一些控制,并把它们放在一个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);

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top