2011-07-25 98 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中可用。 –

相关问题