为什么我的TScrollBox没有显示滚动条?

时间:2012-01-27 16:29:24

标签: delphi tframe tscrollbox

这似乎是一个非常简单的问题,但是我无法使用滚动条来显示滚动条,这让我发疯了。

情况如下。我需要在表单的一部分中显示可变数量的帧。可以通过TSplitter或通过调整表单大小来调整显示这些帧的区域。

我在创建表单时根据数据库中的记录动态生成帧。这些框架是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;

调整大小时会有明显的闪烁,但我可以忍受,因为它会产生所需的结果。一旦用户调整表单大小,它将始终使用这些维度重新创建,因此调整大小是用户不经常进行的操作。

4 个答案:

答案 0 :(得分:7)

当包含控件超出可见矩形时,ScrollBox将仅显示滚动条。由于滚动条中唯一的控件是流动面板,因此客户端无法将滚动框内的流动面板对齐。这将始终使flowpanel等于滚动框的大小,因此不需要滚动。

如果你想要f.i.垂直滚动,使流动面板顶部对齐并自动调整大小。当更多的框架放在里面时,这应该使流动板的高度更大。

以防万一:检查垂直滚动条的Visible属性是否设置为true。

答案 1 :(得分:2)

我没有Autosize真实 我在Scrollbox上有流程面板。 flow planel align设置为leftRightTopBottom。

在formresize事件中,我这样做:

procedure TForm2.FormResize(Sender: TObject);
var
 i,h:integer;
begin
 h:=0;
 for i:=0 to FlowPanel1.ControlCount - 1 do
  h:=Max(FlowPanel1.Controls[i].BoundsRect.Bottom,h);
 ScrollBox1.VertScrollBar.Range:=h;
end;

效果很好。

答案 2 :(得分:1)

我有类似的问题,我通过改编@ Mark的代码解决了这个问题。考虑到FlowPanel1上有ScrollBox1Form1,您可以尝试:

  • ScrollBox1的{​​{1}}属性设置为Align;
  • alClient放在FlowPanel1;
  • ScrollBox1的{​​{1}}属性设置为FlowPanel1

现在,在FlowStyle的{​​{1}}事件中,只需执行:

fsLeftRightTopBottom

见下图中的结果:

FlowPanel with scroll bars

HTH。

答案 3 :(得分:0)

所有使TScrollBox工作的努力都未能满足,但我很高兴地发现将AutoSize和AutoWrap设置为true并将其对齐设置为alTop的对齐设置为具有Orientation = soVertical的TPageScroller工作得相当好。滚动随之而来。

您可能希望设置pagescroller的ButtonSize以使其脱颖而出。 18似乎是正确的。