我刚刚在构建delphi 2010应用程序时注意到滚动条在显示时始终具有相同的大小。无论实际滚动多少,条形图中间的滚动条总是大小相同。相比之下,大多数现代应用程序使用滚动条,其中滚动条的大小与可滚动的数量成比例,因此通过查看可以清楚地滚动多少。有没有办法在我的delphi控件上更改滚动属性,还是需要自定义控件?
编辑: 此特定实例中的组件是TDBGrid,它水平滚动。我没有意识到窗户正在绘制这些滚动条。也许沃伦是正确的,问题是无法回答的。比例滚动条可能在Windows上无处不在,但我还没有在我的Windows机器上找到一个不使用它们的程序。甚至delphi 2010 IDE都使用它们。
答案 0 :(得分: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;
IOW,您使用TScrollInfo
,填写您需要更改的值,包括nMax
和nPage
,并使用SetScrollInfo
调用它,表明滚动条你想改变。我确信大多数带滚动条的控件都在内部控制它们,但如果控件没有,则可以尝试SetScrollInfo
。它可能适用于其中一些。 TScrollInfo
和SetScrollInfo
在Windows.pas
中定义。这是the MSDN link。