有没有办法改变delphi 2010中的滚动条样式?
我刚刚注意到构建一个delphi 2010应用程序时,滚动条总是显示出相同的大小。无论实际滚动多少,滚动条中间的滚动条的大小始终相同。相比之下,大多数现代应用程序都使用滚动条,其中滚动条的大小与可滚动的数量成正比,因此通过查看滚动条的数量可以清楚滚动条的数量。有没有办法改变我的delphi控件的滚动属性,还是需要自定义控件?有没有办法改变delphi 2010中的滚动条样式?
编辑: 此特定实例中的组件是TDBGrid,它横向滚动。我没有意识到Windows正在绘制这些滚动条。也许沃伦是正确的,这个问题是无法回答的。比例滚动条可能不是在窗户上无处不在,但我还没有找到我的Windows机器上没有使用它们的程序。即使是delphi 2010 IDE也使用它们。
这是我要做的事在我的自定义组件(一个简单的文本查看器):
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
,你需要改变值填满它,包括nMax
和nPage
,并用它调用SetScrollInfo
,指示要更改的滚动条。我敢肯定,大多数带有滚动条的控件在内部控制它们,但如果控件没有,你可以试试SetScrollInfo
。它可能适用于其中的一些。 TScrollInfo
和SetScrollInfo
在Windows.pas
中定义。这里是the MSDN link。
FWIW,这是非常古老的代码(但我尝试过了,它仍然有效),那些日子里,我对使用'with'没有任何保留。 ;-) –
谢谢鲁迪。我会尝试。 – Joe
-1恐怕我认为这段代码有误导性。 'TScrollBar.PageSize'属性是应该用来实现这一点的,它在Delphi 5中可用,并且几乎可以肯定地在Delphi 5中可用。 –
请详细说明。您的滚动条连接到什么控件? –
Windows常用控件(备忘录,RichEdit,Listbox等等)绘制自己的滚动条,所以说Delphi 2010与它有任何关系是不正确的。即使Delphi中的大多数自定义控件(如果不是全部)都将100%的滚动条绘画委托给Windows本身。我没有观察到Delphi 2010中有一个固定的小滚动条大小的控件。 –
比例滚动条不如您想像的那么常见(或简单)。 Raymond Chen(MSFT)在这里解释,也许这将有助于:[滚动条,第4部分:添加比例滚动条](http://blogs.msdn.com/b/oldnewthing/archive/2003/07/31/54601。 aspx) –