这似乎是一个非常简单的问题,但我无法让滚动框显示滚动条,这让我发疯。
这是情况。我需要在表单的一部分中显示可变数量的帧。可以通过 TSplitter 或通过调整窗体大小来调整显示这些帧的区域的大小。
创建表单时,我正在根据数据库中的记录动态生成框架。此框架是 FlowPanel 的父级,FlowPanel 负责放置框架。FlowPanel 位于 ScrollBox 中。
由于 FlowPanel,当用户使用 TSplitter 或调整表单大小时,框架可能会重新对齐。如果任何框架重新定位到表单视图之外,我希望 ScrollBox 显示滚动条,以便用户可以向下滚动到那些无法访问的框架。这不会发生。无法访问位于滚动框尺寸之外的流程面板区域中的那些框架。
我用滚动框中的简单对象构建了一些测试,如果滚动框包含的任何对象出现在滚动框的尺寸之外,滚动框就会正确放置滚动条。
流面板是否与 clClient(滚动框)对齐或锚定到滚动框的侧面,或者这些都没有,都没有关系。
我意识到我可以改用 TPanel,并在面板的 OnResize 事件处理程序的代码中执行框架的放置和重新定位,但这就是 FlowPanel 的用途。
这里发生了什么?我摆弄了许多不同的滚动框属性,但仍然无法让它工作。有什么问题,有解决办法吗?
好的。我选择 Ewe 的答案是正确的,但完成这项工作的诀窍在于他的评论之一,我仍然对结果不完全满意。
这是独家新闻。我确实按照 Ewe 建议的方式配置了 ScrollBox 和 FlowPanel,但由于该配置不起作用,我尝试了许多其他设置。我很确定这是由于表单的用户界面的复杂性,它在面板中有许多面板,许多拆分器,并且表单本身是 PageControl 的 TabSheet 的父级(我省略了这个事实,因为测试表单作为一个支架单独的形式产生相同的结果)。
是什么使它工作,尽管以一种笨重的方式,是 Ewe 建议关闭并再次打开 FlowPanel 的 AutoWrap。我在 ScrollBox 的 OnResize 事件处理程序中添加了以下代码:
procedure TCurrentJobsForm.ScrollBox1Resize(Sender: TObject);
begin
Flowpanel1.Autowrap := False;
FlowPanel1.AutoWrap := True;
end;
调整大小时会出现明显的闪烁,但我可以忍受,因为它会产生所需的结果。一旦用户调整表单大小,它总是会使用这些尺寸重新创建,因此调整大小是用户很少会做的事情。