gpt4 book ai didi

delphi - 如何在 TScrollBox 再次可见后显示滚动条?

转载 作者:行者123 更新时间:2023-12-03 15:49:12 25 4
gpt4 key购买 nike

我遇到了一个小问题。我动态生成一些控件并将它们放置在 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 个面板的高度为 200px。
ScrollBox 高度为 300px。

因此,在创建 2 个面板(总高度为 400px)后,滚动框不会显示滚动条,即使第二个面板的一半不可见。如果我再添加一个面板 = 总共 600 像素,滚动框将显示滚动条,看起来它只会滚动每 2 个面板,而不是 3 个。当尝试滚动此类窗口时,值会重新计算,并且所有内容都会很好地显示。

所以主要问题是,如何让滚动框“及时”显示滚动条,这样就不会出现面板被半切的情况?

最佳答案

您可以通过调用从 TWinControl 继承的 Realign() 方法来请求滚动框重新计算其滚动条属性。为了最大限度地减少闪烁,您应该在它仍然不可见时执行此操作,如下所示:

ScrollBox.Visible := False;
try
// create your new panel ...
finally
ScrollBox.Realign;
ScrollBox.Visible := True;
end;

关于delphi - 如何在 TScrollBox 再次可见后显示滚动条?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2662974/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com