这似乎是一个非常简单的问题,但我无法使用滚动条来显示滚动条,这让我发疯。为什么我的TScrollBox不显示滚动条?
这是情况。我需要在表单的一部分中显示可变数量的帧。正在显示这些帧的区域可以通过TSplitter或调整窗体大小来调整大小。
我动态生成基于数据库中的记录的帧创建的形式时。这些框架是由一个FlowPanel负责框架放置的。 FlowPanel位于ScrollBox中。
由于FlowPanel,当用户使用TSplitter或调整大小的形式中,该帧可以重新对准自己。如果任何框架重新定位在窗体视图之外,我期望滚动框显示滚动条,以便用户可以向下滚动到那些不可访问的框架。这不会发生。位于滚动框尺寸之外的流程面板区域中的这些框架不可访问。
我已经建立了一些测试,在一个滚动框简单的对象,以及滚动框正确地放置滚动条,如果任何包含的对象出现在滚动框的尺寸之外。
如果flowpanel对准clClient(在滚动框),或固定在滚动框,或没有这些两侧没关系。
我意识到我可以使用TPanel来替代面板的OnResize事件处理程序中的代码执行框架的放置和重新定位,但这是FlowPanel的用途。
这是怎么回事?我已经摆弄了许多不同的滚动框属性,但仍然无法使其工作。有什么问题,并有解决方案吗?
好的。我选择埃维的答案是正确的,但做这项工作的诀窍是在他的一个评论中,我对结果还没有完全满意。
这是瓢。我的ScrollBox和FlowPanel按照Ewe的建议进行了配置,但是由于该配置无法正常工作,因此需要使用其他一些设置。我很肯定这是由于表单用户界面的复杂性,它在面板中有很多面板,很多分离器,而且表单本身是Patrol到PageControl的TabSheet中的(我将这个表格作为一个表单测试,所以省略了这个事实独自形式产生了相同的结果)。
什么做了工作,尽管在一个笨重的时尚,是埃维的建议来切换FlowPanel的AutoWrap关机并重新开机。我下面的代码添加到滚动框的onResize受到事件处理程序:
procedure TCurrentJobsForm.ScrollBox1Resize(Sender: TObject);
begin
Flowpanel1.Autowrap := False;
FlowPanel1.AutoWrap := True;
end;
调整时有一个明显的闪烁,但我可以忍受的,因为它产生预期的效果。用户调整表单大小后,将始终使用这些维度重新创建,因此调整大小是用户不常使用的操作。
TFlowPanel现在对齐了clTop,而VertScrollBar.Visible属性设置为True。那没有做到。实际上,FlowPanel停止重新定位其中的控件,并且不出现水平或垂直滚动条。假设我一路搞乱了一些属性,我删除了流程面板和滚动框,并放置了新的实例。 ScrollBox与alClient对齐,AutoScroll设置为True,VertScrollBar.Visible为True。 FlowPanel Align设置为alTop,AutoSize为True。仍然没有快乐。没有滚动条出现,并且流程面板不流动。嗯。 – 2012-01-27 17:31:57
在这里完美的作品。您应该知道AutoSize选项会阻碍流控面板在调整滚动条大小时对其控件重新排序(但与滚动条无关)。您可以在滚动框大小调整后将AutoWrap切换为false并返回true。 – 2012-01-27 18:11:27
我相信你的答案是正确的,如果别人没有拿出解决方案,我会在第二天接受它。我仍然有这个问题,但我的表单很复杂。它有8个面板,4个分离器,4个DBGrids,以及多达20个框架(在流程面板中)。 FlowPanel位于ScrollBox上,与另一个面板中的客户端对齐。与ScrollBox相同的面板是另一个顶部对齐的面板。我简单的测试工作,但这些测试都没有重复这种特殊形式的复杂性。 – 2012-01-27 19:41:48