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