我必须在TScrollBox上使用TScrollbar(是的,这似乎是个坏主意,但我必须)滚动框。
这就是我所做的:我在框中添加了滚动条,使用顶部和底部锚点使其保持正轨并将此代码添加到ScrollBar的OnScroll事件中:
procedure TForm1.ScrollBar1Scroll(Sender: TObject;
ScrollCode: TScrollCode;
var ScrollPos: Integer);
begin
ScrollBox1.ScrollBy(0,-scrollPos);
end;
它无法正常工作。总是向下滚动。如何正常滚动?
编辑:请不要建议使用TScrollBox中的栏,我必须使用TScrollBar。
谢谢!
答案 0 :(得分:3)
问题在于您为ScrollBox提供了ScrollBar的绝对滚动位置,其中预期参数是“delta”或更改位置
这是一个快速而肮脏的演示解决方案。根据您的需要,您可以通过创建不同的后代等来使其更清洁。
放入ScrollBox和ScrollBar后,在interface
部分的表单类型声明上方添加此类型声明:
type
TScrollBar = class(StdCtrls.TScrollBar)
private
OldPos : integer;
end;
现在将此用于ScrollBar的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;
这适用于我(在WinXP下的D2006)。