Delphi / C++Builder 的停靠库推荐?

47

我们的团队正在考虑将现有的基于MDI的应用程序移植到更现代的基于停靠的方法。我们还在考虑中,但我们想将其移动到类似VS2010的停靠和视觉外观:

VS2010 UI and docking screenshot

它具有以下功能:

  • 显示窗口停靠的混合轮廓
  • 停靠在选项卡中以及并排
  • 允许通过拖放并释放到显示停靠位置的图像(我在下面称之为“停靠小部件”)来停靠
  • 看起来也很不错(主题/界面方面)

我在寻找一个高质量的停靠库与RAD Studio 2010一起使用,我需要建议,无论是我没有发现的哪个库,还是如何使用我已经发现的库来实现这样的效果。

  • 更新: 我最终购买了AutomatedQA's docking library。我认为这是最好的。有关它的更多详细信息,请参见下面有关它的部分。

  • 更新2,2011年7月:这个问题看了每一个可以用于Delphi/C++Builder的停靠库,所以我试图将其保持最新。我知道的两个变化是:
    • SmartBear现在拥有AutomatedQA,已经终止了AutomatedQA的停靠库。这是我推荐购买的一个库。他们正在考虑开源它。
    • DevExpress停靠的一个问题(使其不值得购买)是缺少对VS2008/10风格的停靠支持,如停靠小部件、透明叠加层等。他们现在正在实施它。由于这一点以及因为AQDocking不再销售,如果我现在问这个问题,我的接受答案将是购买DevExpress Docking

我找到了以下库。以下是概述:

内置的VCL停靠

这使得表单可以停靠在其他表单或 TWinControls 上,但似乎相当基础。表单使用 XOR 绘制的轮廓进行拖动,在 Vista 和 Win7 上效果非常差。有一个 TTabDockSet 控件用于选项卡式停靠窗体,但我无法弄清楚如何控制停靠窗体的标题一旦停靠。我认为实现并排停靠必须手动完成,即动态创建新的 DockSite 面板。RAD Studio IDE 的停靠窗口比这个更加流畅(例如,在拖动窗体时使用透明矩形),这很奇怪,因为我以为它使用了 VCL 停靠支持。

JVCL 停靠

这看起来是比内置 VCL 停靠更好的解决方案。它支持停靠在任何边缘或客户端,并显示一个 alpha 混合矩形,表明表单将停靠在哪里。

JVCL docking test program

它似乎相当有 bug(允许在第一个表单上放置第二个表单,但会冻结程序),并且没有内置的选项卡式停靠支持或任何类型的放置位置小部件。

LMD 停靠包

这看起来很有前途:虽然它似乎不直接停靠表单,但它有停靠面板和控件/框架放置在那里。现有的表单可以迁移到框架。它还具有停靠小部件和选项卡式停靠支持。

然而,演示程序似乎非常不可靠。我安装了最新的评估版本,在其中创建一个有停靠站点和几个面板的新项目并按运行时会导致以下情况:

LMD docking

这在表单组件流中崩溃。通过视觉检查 DFM 文件并不显示任何错误,但布局信息中有一个不透明的二进制块可能会导致此问题。这并不是评估版本特别令人鼓舞的地方。

DevExpress ExpressDocking

我对此寄予厚望:我以前从未使用过 DevExpress 控件,但他们的声誉很好。但是他们的演示程序令人失望:

DevExpress docking

控件有闪烁问题,与Windows主题不兼容,即使使用XP样式也是如此。它具有选项卡停靠功能,但使用异或轮廓-这在XP或Vista上效果不佳,并且它也没有任何停靠部件。老实说,它看起来好像自Windows XP以来就没有更新过了。2011年7月更新:正在改进中

AutomatedQA/SmartBear 停靠库

到目前为止,这是所有库中最有前途的一个。

AutomatedQA docking library

我经常使用AQTime ,这是一款出色的性能分析工具,似乎是使用他们自己的停靠库编写的,并且可以正常使用。然而,最新版本的停靠库试用下载只适用于RAD Studio 2009,安装到2010的建议是不支持的,您应该重新编译源代码。演示程序没有附带源代码,我们也没有RS2009,安装程序会拒绝安装,除非我们有它,而即使我们设法让它安装,我们也不能使用它,因为我们需要重新编译不存在的源代码。

我已经联系了他们的支持团队,他们指引我到这个线程。我还发现另一个客户提出了同样的问题。 我已回复,并希望能听到更好的消息。尤其是当产品不支持我们的IDE时,我不愿意推荐我们购买不能评估的产品。

  • 更新: 我最终购买了这个库。尽管在评估过程中遇到了问题(它可以在D2007中工作,并且我有一份副本),但它似乎是所有库中最易于使用的,也是最强大的-例如,很容易为它编写主题。如果您需要选择一个停靠库,我肯定会推荐它。

  • ...
  • 更新于2011年7月:这个库已不再销售,但可能很快会开源

我错过了什么?

这是目前我找到的一切。现在怎么办?

  • 我错过了哪些适用于Delphi / C++ Builder / RAD Studio 2010 的好的停靠库?
  • 我错过了库中的哪些特性?像 "你错过了 FooBar" 或者 "JVCL 确实有一个停靠部件,你可以这样使用..." 这样的回答听起来非常棒。
  • 您推荐我的下一步是什么?

感谢您的意见 :)


3
确实是一项不错的研究。你漏掉了TMS组件。我无法评论其易用性或性能,但它们往往具有“外观出色”的组件。停靠(docking)组件可以在http://www.tmssoftware.com/site/advtoolbar.asp找到。 - Lieven Keersmaekers
1
我本来想为DevExpress库辩护,直到我自己试用了演示版。与他们的.NET XtraBars控件集相比,它显然看起来“老旧”。但是,停靠指示器已被请求并接受完成 - 但尚未发布日期。如果您使用他们的皮肤支持,它看起来确实更好一些。顺便说一句,我们有DevExpress VCL订阅,它真的非常好 - 但在某些领域它确实远远落后于它的.NET表亲。 - shunty
1
嗨Lieven - TMS控件支持窗体停靠吗?我下载了演示,似乎只有工具栏和菜单。 - David
1
更新于2011年7月的更新:在2013年4月,Smartbear表示“我们现在内部协议同意发布源代码供社区使用。” http://smartbear.com/forums/f57/t46093/tp2/adl-end-of-life#79234 - Barry Staes
3个回答

7
我是一名Jedi JVCL开发者,我在自己的商业内部项目中使用了JvDocking,并发现它非常稳定可靠。此外,它是免费的,易于扩展,创建的外观和感觉与Visual Studio 2008时代的对接非常相似。

您如何实现诸如停靠小部件等功能?您必须自己编写代码还是它们已经内置了?在提出这个问题的时候,JvDocking看起来相当基础(而且有些错误)-虽然那是几年前的事情了。 - David
一个类似于Visual Studio的小部件可能会使用无边框的Alpha混合绘制在停靠区域上完成。我认为我可以将其添加到JvDocking中,但这需要相当数量的自定义绘制代码。任何不熟悉GDI绘制和处理原始鼠标移动消息的人都会有一些乐趣。 - Warren P
完全披露:JvDocking 中有一些 bug,但它并不比其他任何停靠库更糟糕。它们都在做复杂的事情,有时候会出现奇怪的问题。 - Warren P
Visual Studio Clone教授的不仅是如何使用启动画面,还有很多其他知识。拥有非常出色和精心准备的停靠演示文稿。JVCL Docking很棒,因为它解决了三个问题:1. 保存码头信息2. 流畅的拖放体验3. 运行时创建的窗口可停靠示例。比RAD Studio XE5更好。而“Macrosoft Visual Studio”几乎让人感到滑稽。 - user30478

3
我还没有找到一种库,可以满足我所有的需求。在做了一些尝试后,我发现可以通过使用原生VCL Docking(NVCLD)控件进行一系列自定义修改和额外的控件来实现几乎所有我想要的功能。
以下是我在NVCLD工作中遇到的问题清单。我在版本迁移方面没有遇到太多问题,但这是因为我也有源代码。
如果您不想自己编写代码,或者您真的想使用第三方库,那么您可能可以停止阅读剩下的内容。 :)
附加组件:
1. TDockPanel
这个大量修改过的停靠面板是我的系统的主力军。我在网上找到了原始面板,但后来对其进行了修改,以提供更大的灵活性以适应我的需求。
2. 自定义停靠窗体(基础窗体)
通过使用自定义基类用于我的停靠窗体,并在需要时继承它,我可以少做一些修改,适用于所有子孙窗体。
自定义修改:
这些是对NVCLD组件本身的.pas文件所做的修改。由于从D2009开始增强了基础控件,因此大多数这些修改无需再进行。您应该能够创建一个新的子节点并在其中实现更改,而无需直接修改默认的Src文件。
1. 透明停靠窗体
默认情况下(至少在2009年之前),NVCLD不支持透明窗体移动。几年前发布了一个JVCL补丁,为JVCL添加了这种支持,该支持很容易合并到NVLCD补丁中。
2. 停靠管理器
默认的停靠管理器(至少在2009年之前)不允许使用更新/自定义按钮图像或停靠头更改。我相信,当必要的方法变为虚拟时,这一点在D2009中得到了纠正。
3. 选项卡式停靠
为了支持附加的停靠组件,我需要修改DockTabSet.pas文件以支持其他组件使用的其他停靠属性。大多数在先前提到的修改停靠管理器时已经得到纠正。
正如我所说,我将大部分更改直接应用于Delphi Src文件中,但对于较新版本的Delphi,您不需要这样做。我的意思是,通过一些前期工作,您可以拥有一个相当强大的停靠系统,而无需使用第三方库。并不是说它们有什么问题,但除非别无选择或没有时间按照自己的方式进行操作,否则我不愿使用它们。

谢谢Ryan!能否提供一些更改的源代码片段或链接,以便我可以找到更多信息?我购买组件集的主要原因是为了避免重复造轮子...还有太多其他工作要做:p - David
@David M:没问题!我可以尝试创建一个带有源代码的小型演示应用程序,以展示我做了什么以及我在谈论什么。该代码是大型项目的一部分,所以请给我一两天时间来准备。 - Vivian Mills
@David M:我需要一些时间。因为我在制作演示时遇到了一些困难。我已经写好了大约一半的演示内容,但是我白天找不到足够的时间继续完成它。工作总是会妨碍到我。<微笑> - Vivian Mills
1
没问题,谢谢!我最终购买了AQ Docking库——在D2007中进行了评估,看起来相当不错。它还可以节省很多重复造轮子的时间。但是,如果你有时间,我仍然对代码感兴趣,只是为了学习技术。 - David

2

我曾使用过JCL、LMD、DevExpress和Automated QA Docking Library。

你能找到最符合你需求的是AutomatedQA Docking Library。我在我的一个项目中使用了它。

接下来,你可以购买AutomatedQA Library :)

来自一位满意的客户。


该产品已经停产,无法获取。 - 0scar
然后使用LMD工具、LMD Dock... - buttercup

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接