一个。创建Delphi VCL Forms应用程序。
B中。在表单上放置一个TTreeView,将其命名为tvTest
并填充项目并设置Treeview的大小,以便在TreeView上显示滚动条,例如:
℃。在表单上放一个按钮,在其单击处理程序中写下以下代码:
procedure TForm1.btnScrollClick(Sender: TObject);
begin
tvTest.ScrollBy(tvTest.Width, 0);
end;
d。现在运行程序并单击按钮。据说水平滚动条应该从左向右滚动。但没有任何反应。为什么呢?
那么如何制作滚动条(当然还有滚动条的内容)从左到右,从右到左,向下或向上滚动?
Delphi 10.1 Berlin Update 2
Windows 7 x64 SP1
编辑:当我使用此代码时(类似于萨米的建议):
tvTest.ScrollBy(-3, -3);
......我得到了这件现代艺术品:
答案 0 :(得分:4)
要滚动TreeView,请发送它(或Perform
)WM_VSCROLL
和/或WM_HSCROLL
消息。
tvTest.Perform(WM_HSCROLL, MakeWParam(SB_LINERIGHT, 0), 0);
或
tvTest.Perform(WM_VSCROLL, MakeWParam(SB_LINEDOWN, 0), 0);
请参阅参数消息的相应文档。
ScrollBy
是VCL的ScrollWindow
API包装器,它会移动控件的内容。它是绘制滚动控件的客户端的一部分的快捷方式,显示(空)部分应该另外绘制。它通常由控件的内部实现使用。不是你想要的。