簡體   English   中英

如何更改 ScrollBar 的寬度?

[英]How do I change the width of a ScrollBar?

我想更改 TFrame 的 ScrollingBar 寬度。
我知道我可以通過以下方式更改系統中的所有 ScrollingBars:

SystemParametersInfo(SPI_SETNONCLIENTMETRICS,....

但是我如何為特定的 WinControl 做到這一點?

Delphi 中的許多代碼取決於滾動條的寬度作為固定的系統設置,因此您無法在不破壞控件的情況下更改寬度。 (並非沒有在 VCL 中重寫 TControlScrollBar 和相關控件。)

當然,您可以隱藏控件的默認滾動條並在其旁邊添加您自己的 TScrollbar 組件。


標准的 TScrollBar 類是一個 WinControl 本身,其中滾動條占據了控件的整個寬度和高度。 TControlScrollBar 類鏈接到其他 WinControl 以管理分配給窗口控件的默認滾動條。 雖然原始 API 可以使使用更靈活的寬度成為可能,但您總是會遇到這樣的問題,即 VCL 只會假設這些控件的默認系統定義寬度。

這也顯示了兩種滾動條類型之間的最大區別:TScrollBar 有它自己的 Windows 句柄,而 TControlScrollBar 從相關控件借用它。

你可以嘗試這樣的事情:

  your_frame.HorzScrollBar.Size := 50;
  your_frame.HorzScrollBar.ButtonSize := your_frame.HorzScrollBar.Size;
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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM