如何以编程方式滚动 TTreeView?

use*_*348 5 delphi treeview scroll delphi-10.1-berlin

A. 创建一个 Delphi VCL Forms 应用程序。

B、在窗体上放一个TTreeView,命名tvTest并填充items并设置Treeview的大小,这样在TreeView上滚动条是可见的,例如:

在此处输入图片说明

C. 在窗体上放置一个按钮并在其单击处理程序中编写以下代码:

  procedure TForm1.btnScrollClick(Sender: TObject);
  begin
    tvTest.ScrollBy(tvTest.Width, 0);
  end;
Run Code Online (Sandbox Code Playgroud)

D. 现在运行程序并单击按钮。假设水平滚动条应该从左到右滚动。但什么也没有发生。为什么?

那么我怎样才能让滚动条(当然还有滚动条的内容)从左到右、从右到左、向下或向上滚动?

Delphi 10.1 柏林更新 2
Windows 7 x64 SP1

编辑:当我使用此代码时(类似于萨米的建议):

tvTest.ScrollBy(-3, -3);

...我得到了这幅现代艺术作品:

在此处输入图片说明

Ser*_*yuz 6

要滚动 TreeView 发送它(或PerformWM_VSCROLL和/或WM_HSCROLL消息。

tvTest.Perform(WM_HSCROLL, MakeWParam(SB_LINERIGHT, 0), 0);
Run Code Online (Sandbox Code Playgroud)

或者

tvTest.Perform(WM_VSCROLL, MakeWParam(SB_LINEDOWN, 0), 0);
Run Code Online (Sandbox Code Playgroud)

参数见对应的消息文档。

ScrollBy是 VCL 的ScrollWindowAPI包装器,它改变控件的内容。这是绘制滚动控件的客户端部分的快捷方式,应另外绘制显示的(空)部分。它通常由控件的内部实现使用。不是你要找的。