2011-07-25 99 views
3

我剛剛注意到構建一個delphi 2010應用程序時,滾動條總是顯示出相同的大小。無論實際滾動多少,滾動條中間的滾動條的大小始終相同。相比之下,大多數現代應用程序都使用滾動條,其中滾動條的大小與可滾動的數量成正比,因此通過查看滾動條的數量可以清楚滾動條的數量。有沒有辦法改變我的delphi控件的滾動屬性,還是需要自定義控件?有沒有辦法改變delphi 2010中的滾動條樣式?

編輯: 此特定實例中的組件是TDBGrid,它橫向滾動。我沒有意識到Windows正在繪製這些滾動條。也許沃倫是正確的,這個問題是無法回答的。比例滾動條可能不是在窗戶上無處不在,但我還沒有找到我的Windows機器上沒有使用它們的程序。即使是delphi 2010 IDE也使用它們。

+2

請詳細說明。您的滾動條連接到什麼控件? –

+5

Windows常用控件(備忘錄,RichEdit,Listbox等等)繪製自己的滾動條,所以說Delphi 2010與它有任何關係是不正確的。即使Delphi中的大多數自定義控件(如果不是全部)都將100%的滾動條繪畫委託給Windows本身。我沒有觀察到Delphi 2010中有一個固定的小滾動條大小的控件。 –

+1

比例滾動條不如您想像的那麼常見(或簡單)。 Raymond Chen(MSFT)在這裏解釋,也許這將有助於:[滾動條,第4部分:添加比例滾動條](http://blogs.msdn.com/b/oldnewthing/archive/2003/07/31/54601。 aspx) –

回答

1

這是我要做的事在我的自定義組件(一個簡單的文本查看器):

procedure TCustomViewer.UpdateScrollInfo; 
var 
    ScrollInfo: TScrollInfo; 
begin 
    with ScrollInfo do 
    begin 
    cbSize := SizeOf(ScrollInfo); 
    fMask := SIF_POS or SIF_PAGE or SIF_RANGE or SIF_DISABLENOSCROLL; 
    nMin := 0; 
    nMax := 1023; 
    nPage := PageWidth; 
    nPos := FTopLeft.X; 
    end; 
    SetScrollInfo(Handle, SB_HORZ, ScrollInfo, True); 
    with ScrollInfo do 
    begin 
    nMax := FLines.Count - 1; 
    nPage := PageHeight; 
    nPos := FTopLeft.Y; 
    end; 
    SetScrollInfo(Handle, SB_VERT, ScrollInfo, True); 
    UpdateCaretPos; 
    Update; 
end; 

督察,您使用的是TScrollInfo,你需要改變值填滿它,包括nMaxnPage,並用它調用SetScrollInfo,指示要更改的滾動條。我敢肯定,大多數帶有滾動條的控件在內部控制它們,但如果控件沒有,你可以試試SetScrollInfo。它可能適用於其中的一些。 TScrollInfoSetScrollInfoWindows.pas中定義。這裏是the MSDN link

+0

FWIW,這是非常古老的代碼(但我嘗試過了,它仍然有效),那些日子裏,我對使用'with'沒有任何保留。 ;-) –

+0

謝謝魯迪。我會嘗試。 – Joe

+0

-1恐怕我認爲這段代碼有誤導性。 'TScrollBar.PageSize'屬性是應該用來實現這一點的,它在Delphi 5中可用,並且幾乎可以肯定地在Delphi 5中可用。 –

相關問題