2009-09-11 121 views
3

如果您打開記事本,添加十行並調整大小以僅顯示九個編輯器,縮略圖軌跡(滾動條上的可拖動塊)幾乎是垂直滾動條的全長。如果添加幾千行,拇指軌道只有幾個像素高。如何使滾動條的縮略圖調整大小

我想重複這個bahaviour在TCustomControl後裔,我實現了一個水平滾動條。所以我將WS_HSCROLL添加到我的窗口樣式(在CreateParams中)並實現了WM_HSCROLL的處理程序。一路上,我使用SetScrollRange和SetScrollPos來管理範圍和拇指軌跡的位置 - 但小小的肛交者仍然是一個近乎完美的方形。

我錯過了什麼?

+0

Cobus,您的代碼示例對您的幫助非常有用。 – RRUZ 2009-09-11 01:34:46

+0

@RRUZ:不,絕對沒有必要。如果你想看看怎麼不這樣做,看看沒有比VCL網格控制更遠。如果你想看看如何做到這一點,看看VirtualTree,Sy​​nEdit或任何其他正常工作的控制。它們的源代碼可用。 – mghie 2009-09-11 05:08:46

+0

嗨,這是一個更相關的問題:你如何添加滾動到控件本身,是否有一個TScrollbar是TCustomControl後代類的成員? – wmercer 2012-02-19 22:16:45

回答

4

The documentation建議使用SetScrollInfo而不是SetScrollRangeSetScrollPos。因爲Wouter's answer指出,你還需要設置頁面大小。位置和範圍告訴操作系統拇指中心所在的位置,但頁面尺寸告訴它該範圍有多少可見,而決定了拇指大小。你必須使用SetScrollInfo;作爲獎勵,它可讓您一次設置位置,範圍和頁面大小。


TCustomControlTWinControl不同之處只是一種方法:它有一個畫布。 TScrollingWinControl也有不同之處:它有滾動條。將畫布添加到TScrollingWinControl後代應該比將滾動條添加到TCustomControl後代要容易得多 - 從VCL源代碼複製和粘貼的代碼更少。改變你的控件的基類,然後看看你在哪裏。

即使這不是一個選項,你仍然可以好好看看TScrollingWinControlTControlScrollBar如何一起工作。

+0

+1,但從長遠來看,我不確定從'TScrollingWinControl'繼承的工作是否較少。至少在Win9X上,它也嚴重限制了可用的滾動範圍(16位座標)。即使在NT行上,它也會將行數限制爲2^31'div'(行高),以像素爲單位。我寧願使用'SetScrollInfo()'並計算代碼中的所有內容。 – mghie 2009-09-11 05:13:58

+0

我不同意你的答案的TScrollingWinControl部分,部分原因是我的滾動需要相當複雜。但是我使用了SetScrollInfo,它的工作原理很好,謝謝。 – 2009-09-14 10:14:07

7

您可以使用PageSize屬性來影響拇指大小。

例子:

ScrollBar1.Min  := 0; 
ScrollBar1.Max  := 100; 
ScrollBar1.Position := 70; 
ScrollBar1.PageSize := 50; 

看起來像:

Page Size

+1

+1很高興有一個視覺!很好的觸摸 – Argalatyr 2009-09-11 01:49:43

+0

這是在滾動條控件?我正在使用窗口上的滾動條。 – 2009-09-11 07:24:09

相關問題