如何以编程方式滚动 TTreeView?
How to scroll a TTreeView programmatically?
一个。创建一个 Delphi VCL Forms 应用程序。
乙。在窗体上放置一个 TTreeView,命名为 tvTest
并用项目填充它并设置 Treeview 的大小,以便滚动条在 TreeView 上可见,例如:
C。在窗体上放置一个按钮,并在其点击处理程序中写入以下代码:
procedure TForm1.btnScrollClick(Sender: TObject);
begin
tvTest.ScrollBy(tvTest.Width, 0);
end;
D.现在 运行 程序并单击按钮。假设水平滚动条应该从左向右滚动。但是没有任何反应。为什么?
那么如何让滚动条(当然还有内容的滚动条)从左到右、从右到左、向下或向上滚动?
Delphi 10.1 柏林更新 2
Windows 7 x64 SP1
编辑:当我使用这段代码时(类似于萨米的建议):
tvTest.ScrollBy(-3, -3);
...我得到了这件现代艺术作品:
要滚动 TreeView,请发送(或 Perform
)WM_VSCROLL
and/or WM_HSCROLL
条消息。
tvTest.Perform(WM_HSCROLL, MakeWParam(SB_LINERIGHT, 0), 0);
或
tvTest.Perform(WM_VSCROLL, MakeWParam(SB_LINEDOWN, 0), 0);
参数见消息对应文档
ScrollBy
是 VCL 对 ScrollWindow
API 的包装器,它移动控件的内容。这是绘制滚动控件的客户端部分的快捷方式,应该额外绘制显示的(空)部分。它通常由控件的内部实现使用。不是你要找的。
一个。创建一个 Delphi VCL Forms 应用程序。
乙。在窗体上放置一个 TTreeView,命名为 tvTest
并用项目填充它并设置 Treeview 的大小,以便滚动条在 TreeView 上可见,例如:
C。在窗体上放置一个按钮,并在其点击处理程序中写入以下代码:
procedure TForm1.btnScrollClick(Sender: TObject);
begin
tvTest.ScrollBy(tvTest.Width, 0);
end;
D.现在 运行 程序并单击按钮。假设水平滚动条应该从左向右滚动。但是没有任何反应。为什么?
那么如何让滚动条(当然还有内容的滚动条)从左到右、从右到左、向下或向上滚动?
Delphi 10.1 柏林更新 2
Windows 7 x64 SP1
编辑:当我使用这段代码时(类似于萨米的建议):
tvTest.ScrollBy(-3, -3);
...我得到了这件现代艺术作品:
要滚动 TreeView,请发送(或 Perform
)WM_VSCROLL
and/or WM_HSCROLL
条消息。
tvTest.Perform(WM_HSCROLL, MakeWParam(SB_LINERIGHT, 0), 0);
或
tvTest.Perform(WM_VSCROLL, MakeWParam(SB_LINEDOWN, 0), 0);
参数见消息对应文档
ScrollBy
是 VCL 对 ScrollWindow
API 的包装器,它移动控件的内容。这是绘制滚动控件的客户端部分的快捷方式,应该额外绘制显示的(空)部分。它通常由控件的内部实现使用。不是你要找的。