如何更改ScrollBar的宽度?

时间:2009-09-16 12:40:02

标签: delphi

我想更改TFrame的ScrollingBar宽度 我知道我可以通过以下方式更改系统中的所有ScrollingBars:

SystemParametersInfo(SPI_SETNONCLIENTMETRICS,....

但我如何为特定的WinControl执行此操作?

3 个答案:

答案 0 :(得分:1)

Delphi中的许多代码都依赖于滚动条的宽度作为固定系统设置,因此您不能在不破坏控件的情况下改变宽度。 (并非没有重写VCL中的TControlScrollBar和相关控件。)

当然,您可以隐藏控件的默认滚动条,并在其旁边添加自己的TScrollbar组件。


标准TScrollBar类是一个WinControl本身,其中滚动条占据了整个控件的宽度和高度。 TControlScrollBar类链接到其他WinControl以管理分配给Windowed控件的默认滚动条。虽然原始API可以使用更灵活的宽度,但您总是会遇到这样的问题:VCL将假定这些控件的默认系统定义宽度。

这也显示了两种滚动条类型之间的最大区别:TScrollBar拥有自己的Windows句柄,而TControlScrollBar则从相关控件中借用它。

答案 1 :(得分:1)

您可以尝试这样的事情:

  your_frame.HorzScrollBar.Size := 50;
  your_frame.HorzScrollBar.ButtonSize := your_frame.HorzScrollBar.Size;

答案 2 :(得分:-1)

procedure TForm1.FormCreate(Sender: TObject);
var NCMet: TNonClientMetrics;
begin
     FillChar(NCMet, SizeOf(NCMet), 0);
     NCMet.cbSize:=SizeOf(NCMet);
     // get the current metrics
     SystemParametersInfo(SPI_GETNONCLIENTMETRICS, SizeOf(NCMet), @NCMet, 0);
     // set the new metrics
     NCMet.iScrollWidth:=50;
     SystemParametersInfo(SPI_SETNONCLIENTMETRICS, SizeOf(NCMet), @NCMet, SPIF_SENDCHANGE);
end;