Delphi 显示垂直滚动条的所有要求:为什么隐藏?

Delphi 显示垂直滚动条的所有要求:为什么隐藏?,delphi,scrollbar,vcl,Delphi,Scrollbar,Vcl,显示垂直滚动条的所有要求是什么?看起来很随意 我试过: HorzScrollBar.Range := 10000; // set the range to an higher number VertScrollBar.Range := 10000; // set the range to an higher number ShowScrollBar(Handle, SB_BOTH, True); 与调整对象检查器中的范围以及自动滚动打开/关闭、客户端高度(表单)相结合。我想在过去的一个小时里我

显示垂直滚动条的所有要求是什么?看起来很随意

我试过:

HorzScrollBar.Range := 10000; // set the range to an higher number
VertScrollBar.Range := 10000; // set the range to an higher number
ShowScrollBar(Handle, SB_BOTH, True);
与调整对象检查器中的范围以及自动滚动打开/关闭、客户端高度(表单)相结合。我想在过去的一个小时里我有了所有可能的组合。看起来不管我做什么,滚动条都不会再回来了——当我随机重新调整一些设置(到相同的设置?)时,它第一次出现在这里

我试图实现的目标:当我按下按钮时,表单将显示,并应显示在屏幕右侧,如下所示:

Form1.Height := Screen.Height - 40;
Form1.Left := Screen.Width - 423;
Form1.Show;
procedure TfrmInstellingenMenu.Button1Click(Sender: TObject);
begin
VertScrollBar.Visible := true;
ShowMessage('Visible? ' + BoolToStr(VertScrollBar.IsScrollBarVisible)); 
    //returns "Visible? -1". -1 is TRUE*, so yes (*tnx Ken)
ShowMessage('Autoscroll turned on? ' + BoolToStr(AutoScroll));
    //returns "Autoscroll turned on? 0". 0 is False, so no
ShowMessage('Range=' + IntToStr(VertScrollBar.Range));
    //returns "Range=8000". 
end;
这个表单是一个选项菜单,所有的选项都完全适合我现在使用的屏幕。但是,我制作了一个面板,当单击某个选项时,面板将变得更长(更高),并向下推所有其他选项。所以当我需要滚动条时,设置开始从屏幕上消失

理想情况下,它只会在那些单击的选项出现时显示,而在不再需要时消失,但不知何故,它根本不会出现——不管我给出的表单是什么大小或范围

我忘记设置的其他选项/AutoScroll或VerticalScrollbar还有哪些依赖项,以便在需要时显示


有了ShowMessage功能,我有了更多的信息。我创建了一个按钮,执行以下操作:

Form1.Height := Screen.Height - 40;
Form1.Left := Screen.Width - 423;
Form1.Show;
procedure TfrmInstellingenMenu.Button1Click(Sender: TObject);
begin
VertScrollBar.Visible := true;
ShowMessage('Visible? ' + BoolToStr(VertScrollBar.IsScrollBarVisible)); 
    //returns "Visible? -1". -1 is TRUE*, so yes (*tnx Ken)
ShowMessage('Autoscroll turned on? ' + BoolToStr(AutoScroll));
    //returns "Autoscroll turned on? 0". 0 is False, so no
ShowMessage('Range=' + IntToStr(VertScrollBar.Range));
    //returns "Range=8000". 
end;
因此,尽管VertScrollbar已打开,但AutoScroll(因此)已自动关闭,加上范围已足够远,为什么它仍隐藏

编辑2: 更多详情:
这是一个VCL表单,borderstyle设置为BSSizeable。在表格中,基本上只有两个相同尺寸的面板。它们都具有受约束的大小,并且在开始时左右对齐。按钮将它们与顶部和底部对齐。当我设置按钮将它们都设置为与顶部对齐时,我设置的形状高度不再重要(可能是由于两个面板的约束)。但它对我的电脑屏幕来说太高了,表格的一部分从屏幕上消失了。当我将一个设置为顶部对齐,另一个设置为底部对齐时,整个表单都显示在屏幕上,但两个面板相互重叠。啊,当然还是没有滚动条。

自动滚动打开

设置
Autoscroll=true
如果表单上组件的范围超过表单客户端大小,则会显示滚动条

  • 边框样式可以是
    bsSizeToolWin
    (默认)或
    bsSizeToolWin
  • 设置
    VertScrollBar.Visible=false不会阻止可见性
注意在IDE中更改边框样式,并设置
Autoscroll=true
,将显示任何边框样式的滚动条,但仅在IDE中显示。这可能把你弄糊涂了

自动滚动关闭

设置
VertScrollBar.Range
大于窗体的客户端高度时,无论
BorderStyle
Autoscroll
设置如何,都会显示滚动条。在这种情况下,可视性可以根据需要使用
VertScrollBar.Visible
进行控制

您没有说明您想使用哪种边框样式,但如果是隐藏滚动条的一种样式,您还可以考虑将控件放在<代码>滚动框< /> > <代码> Algun= AlclieOs/Cuff> < /P>


在有问题的edit2之后编辑:

<>你的“Eddi2”改变了上下文,但是我建议你考虑下面的测试,我用一个表单,两个面板和一个按钮。strong>要防止面板在此上下文中重叠(或留下间隙),应将两个面板设置为相同的
Align
。更改
Align
(对于水平/垂直)后,只需将表单高度重置为其应有的高度。在下面的代码后面解释

在表单中添加了以下字段:

private
  Horizontal: boolean;
Panel1
Panel2
的约束设置为100150100150(顺序与OI相同)

两个面板的属性
Align
设置为
alTop
。窗体调整大小以包围两个面板

属性
Form5.AutoScroll
设置为
True
Form5
的约束设置为180,180,0,0。注意滚动条是如何显示的,增加窗体的宽度以腾出空间

按钮放置在
面板1上,单击
OnClick
如下所示:

procedure TForm5.Button1Click(Sender: TObject);
begin
  Horizontal := not Horizontal;
  if Horizontal then
  begin
    Panel2.Align := alLeft;
    Panel1.Align := alLeft;
  end
  else
  begin
    Panel1.Align := alTop;
    Panel2.Align := alTop;
    Constraints.MaxHeight := 180;  // set size of form back to what it should be
  end;
end;
重置形状高度的原因是,在计算范围时,不考虑形状约束。不知道是否按照设计,但无论如何,这就是为什么你的表单会漂浮在上面。因此,实际上不需要在设计时设置表单约束


自动滚动打开

设置
Autoscroll=true
如果表单上组件的范围超过表单客户端大小,则会显示滚动条

  • 边框样式可以是
    bsSizeToolWin
    (默认)或
    bsSizeToolWin
  • 设置
    VertScrollBar.Visible=false不会阻止可见性
注意在IDE中更改边框样式,并设置
Autoscroll=true
,将显示任何边框样式的滚动条,但仅在IDE中显示。这可能把你弄糊涂了

自动滚动关闭

设置
VertScrollBar.Range
大于窗体的客户端高度时,无论
BorderStyle
Autoscroll
设置如何,都会显示滚动条。在这种情况下,可视性可以根据需要使用
VertScrollBar.Visible
进行控制

您没有说明您想使用哪种边框样式,但如果是隐藏滚动条的一种样式,您还可以考虑将控件放在<代码>滚动框< /> > <代码> Algun= AlclieOs/Cuff> < /P>