我们的团队正在考虑将现有的基于MDI的应用程序移植到更现代的基于停靠的方法。我们还在考虑中,但我们想将其移动到类似VS2010的停靠和视觉外观:
它具有以下功能:
- 显示窗口停靠的混合轮廓
- 停靠在选项卡中以及并排
- 允许通过拖放并释放到显示停靠位置的图像(我在下面称之为“停靠小部件”)来停靠
- 看起来也很不错(主题/界面方面)
我在寻找一个高质量的停靠库与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 混合矩形,表明表单将停靠在哪里。
它似乎相当有 bug(允许在第一个表单上放置第二个表单,但会冻结程序),并且没有内置的选项卡式停靠支持或任何类型的放置位置小部件。
LMD 停靠包
这看起来很有前途:虽然它似乎不直接停靠表单,但它有停靠面板和控件/框架放置在那里。现有的表单可以迁移到框架。它还具有停靠小部件和选项卡式停靠支持。
然而,演示程序似乎非常不可靠。我安装了最新的评估版本,在其中创建一个有停靠站点和几个面板的新项目并按运行时会导致以下情况:
这在表单组件流中崩溃。通过视觉检查 DFM 文件并不显示任何错误,但布局信息中有一个不透明的二进制块可能会导致此问题。这并不是评估版本特别令人鼓舞的地方。
DevExpress ExpressDocking
我对此寄予厚望:我以前从未使用过 DevExpress 控件,但他们的声誉很好。但是他们的演示程序令人失望:
控件有闪烁问题,与Windows主题不兼容,即使使用XP样式也是如此。它具有选项卡停靠功能,但使用异或轮廓-这在XP或Vista上效果不佳,并且它也没有任何停靠部件。老实说,它看起来好像自Windows XP以来就没有更新过了。2011年7月更新:正在改进中。AutomatedQA/SmartBear 停靠库
到目前为止,这是所有库中最有前途的一个。
我经常使用AQTime ,这是一款出色的性能分析工具,似乎是使用他们自己的停靠库编写的,并且可以正常使用。然而,最新版本的停靠库试用下载只适用于RAD Studio 2009,安装到2010的建议是不支持的,您应该重新编译源代码。演示程序没有附带源代码,我们也没有RS2009,安装程序会拒绝安装,除非我们有它,而即使我们设法让它安装,我们也不能使用它,因为我们需要重新编译不存在的源代码。
我已经联系了他们的支持团队,他们指引我到这个线程。我还发现另一个客户提出了同样的问题。 我已回复,并希望能听到更好的消息。尤其是当产品不支持我们的IDE时,我不愿意推荐我们购买不能评估的产品。
更新: 我最终购买了这个库。尽管在评估过程中遇到了问题(它可以在D2007中工作,并且我有一份副本),但它似乎是所有库中最易于使用的,也是最强大的-例如,很容易为它编写主题。如果您需要选择一个停靠库,我肯定会推荐它。
- ...
更新于2011年7月:这个库已不再销售,但可能很快会开源。
我错过了什么?
这是目前我找到的一切。现在怎么办?
- 我错过了哪些适用于Delphi / C++ Builder / RAD Studio 2010 的好的停靠库?
- 我错过了库中的哪些特性?像 "你错过了 FooBar" 或者 "JVCL 确实有一个停靠部件,你可以这样使用..." 这样的回答听起来非常棒。
- 您推荐我的下一步是什么?
感谢您的意见 :)