2009-08-13 87 views
1

我必須在TScrollBox上使用TScrollbar(是的,這似乎是個壞主意,但我必須)滾動該框。如何在滾動條上使用滾動條?

這就是我所做的:我加入了滾動在包裝盒上,使用頂部和底部錨,以保持它的軌道上,並在滾動條的OnScroll事件添加以下代碼:

procedure TForm1.ScrollBar1Scroll(Sender: TObject; 
              ScrollCode: TScrollCode; 
              var ScrollPos: Integer); 
begin 
    ScrollBox1.ScrollBy(0,-scrollPos); 
end; 

它不工作正確。總是向下滾動。如何使其正常滾動?

編輯:請不要建議使用TScrollBox中的酒吧,我必須使用TScrollBar。

謝謝!

回答

3

的問題是,你給的滾動框滾動條的絕對滾動位置,那裏的預期參數是

位置

這裏,「增量」或變化有一個快速和骯髒的演示解決方案。根據您的需要,您可以通過創建不同的後代等來使這個更清潔。

在滾動框和滾動條滴注後,在interface部分添加上述表單的類型聲明此類型聲明:

type 
    TScrollBar = class(StdCtrls.TScrollBar) 
    private 
    OldPos : integer; 
    end; 

現在使用此爲滾動條OnScroll事件:

procedure TForm1.ScrollBar1Scroll(Sender: TObject; ScrollCode: TScrollCode; 
    var ScrollPos: Integer); 
var 
    Delta : integer; 
begin 
    Delta := ScrollPos - ScrollBar1.OldPos; 
    ScrollBox1.ScrollBy(0, -Delta); 
    ScrollBar1.OldPos := ScrollPos; 
end; 

這適用於我(Win200下的D2006)。

+0

當我的投票限制沒有達到時,我會投這個票,對不起。我對這件事很熟悉。 :) – 2009-08-13 05:02:20