VirtualTreeView 的 Firemonkey 版本

Posted

技术标签:

【中文标题】VirtualTreeView 的 Firemonkey 版本【英文标题】:Firemonkey version of VirtualTreeView 【发布时间】:2011-11-17 23:52:58 【问题描述】:

有没有人碰巧知道流行的VirtualTreeView 的Firemonkey 版本是否正在准备中?此外,是否有人收集了一些将自定义控件移植到 Firemonkey 的经验,并且可以估计将虚拟树视图移植到 Firemonkey 需要多少工作?我们需要这个控件,而切换到 Firemonkey 只是一种选择,前提是我们可以让这个控件起作用。

谢谢!

【问题讨论】:

我确信大多数主要组件套件开发人员都在为 FireMonkey 重写他们的大部分产品。您是否直接联系过 VirtualTreeView 人员?链接:soft-gems.net/index.php?option=com_contact&Itemid=3 另一方面,我预计许多商业开发商在花费大量美元之前会评估市场。对于开源项目,可能有的正在为 FM 积极开发,有的可能在观望。我预计很多(如果不是大多数)开源库都需要 FireMonkey 冠军来接手并制作 FM 版本。 我不会屏住呼吸。他们确实将它移植到了 Delphi.NET,但我认为将它移植到 FireMonkey 并不容易。 (我是唯一一个对着火的猴子打字感到愚蠢的人吗?) 但是有什么替代方案呢? Firemonkey 是否有任何可用的虚拟网格/树视图? 【参考方案1】:

据我了解,FireMonkey 与 VCL 如此不同,以至于需要进行重大重写,基本上是从头开始重写控件...快速查看了谷歌代码的 SVN,看起来不像有人已经开始移植到 FM,但有用于 XE2 的 (VCL) 包。

【讨论】:

这确实是一次重大的重写,可能从头开始。 FireMonkey 非常不同。 FireMonkey 不使用单体组件,它使用一组或多或少复杂的层,每个层都可以有自己的布局、颜色、渐变、方向等。组件代码只是操纵这些层,按名称对其进行寻址。可以使用具有多个不同嵌套组件的 TListBox 来完成虚拟树视图。由于(大多数)组件没有窗口句柄,这并不是它看起来的巨大资源浪费。 谢谢,我接受了这个,因为这似乎是普遍的看法——即使它不是很令人满意。【参考方案2】:

替代品...

FireMonkey 有自己的树视图,称为 FMX.TreeView。 Embarcadero documentation about it 非常小。与 VirtualTreeview 相比,它非常原始,但目前它可能是所有可用的。

如果您使用 VirtualTreeview 作为网格,那么您可能不得不求助于 Firemonkey 的 TGrid 或 TStringGrid 或 TDBGrid。 The grid implementation is fairly basic。但显然 TDBGrid 还不错。 Arnaud Bouchez 有 some screenshots of some Firemonkey Controls 并表示 TDBGrid 内容是虚拟的,并以屏幕截图为例。

很可能是第 3 方组件构建器,例如TMS(TAdvStringGrid)、Woll2Woll(InfoPower)、Berg(NextGrid5)等,都会出来一些东西。如果看起来 VirtualTreeview 不会被移植到 FireMonkey,那么其中一个将有机会产生一个可接受的替代方案。

【讨论】:

感谢您的回答!不幸的是,FMX.TreeView 错过了 VirtualTreeView 最重要的特性……它不是虚拟的。网格似乎支持使用 OnGetValue 事件的虚拟模式,但它包含严重的显示错误 (***.com/questions/7486218/firemonkey-scrollbox-bug)【参考方案3】:

我知道这个问题有答案。

但答案在某个时间点是正确的。

现在我有最小的 VirtualTree 端口到 Firemonkey。 看看我在 github 上的 fork https://github.com/livius2/Virtual-TreeView

我会努力争取多少空闲时间。 你可以想象开始有多么困难,因为 VCL 和 FMX 是完全不同的东西。

【讨论】:

【参考方案4】:

TMS 有一个用于 FMX 的虚拟树视图。支持安卓。

【讨论】:

以上是关于VirtualTreeView 的 Firemonkey 版本的主要内容,如果未能解决你的问题,请参考以下文章

Virtual Treeview使用要点

Delphi:TOleControl 将 ActiveControl 置于错误状态?

如何确定主线程没有响应 Omni 线程库的原因?

有没有好的免费/便宜的 Delphi 网格控件?

关于光的反射和折射的例子?

既是3的倍数又是5的倍数都有哪些