在我们的应用程序中,我将从TStringGrid移动到TVirtualStringTree组件。显示了大量数据(最多50000行和5列)。一列包含一行或多行文本。我设法使用' DrawCell'来实现多线功能。在具有最佳性能的stringgrid中:所有行的即时重绘(在调整大小时)和滚动没有故障(我在内存中有行高度列表,在需要重绘时会更新)。
将此多行功能传输到VirtualStringTree的效果不如stringgrid替代方案。我尝试了很多实现,但还没有成功。这在VirtualStringTree安装包的Demo应用程序中很容易重现:
使用大量CPU进行初始重绘/重绘需要一段时间。 Ater每次调整大小,跳到顶部/底部都会导致相同的现象,甚至导致堆栈溢出'例外(但这是另一个问题......)。 ' OnMeasureItem'方法被称为方式太多,我看到的方式(甚至在鼠标移动事件中)。
是否有人遇到此问题并设法找到解决方案?
答案 0 :(得分:2)
这在演示应用程序中很容易重现 VirtualStringTree安装包
至少可以通过将ReinitNode()
和BeginUpdate()
EndUpdate()
中的 MLTree.BeginUpdate();
try
MLTree.ReinitNode(nil, True);
finally
MLTree.EndUpdate();
end;
的来电包裹起来轻松解决此问题:
1
2
0
2
1
2
3
2
...
我今天稍微改进了示例项目和Virtual Treeview,示例项目现在工作得更顺畅了。试试latest source code from GitHub。