推荐 Delphi / C++Builder 的对接库?
Posted
技术标签:
【中文标题】推荐 Delphi / C++Builder 的对接库?【英文标题】:Recommendations for a docking library for Delphi / C++Builder? 【发布时间】:2011-03-24 14:01:22 【问题描述】:我的团队目前正在考虑将我们现有的基于 MDI 的应用程序迁移到更现代、基于停靠的方法。我们仍在考虑,但我们想将其移动到类似于 VS2010 的停靠和视觉外观:
它具有以下特点:
在窗口停靠的位置显示混合轮廓 停靠到选项卡中,以及并排放置 允许通过在显示停靠位置的图像上拖放和释放来停靠(我在下面将其称为“停靠小部件”) 看起来也不错(主题/UI 方面)我在寻找与 RAD Studio 2010 一起使用的优质停靠库时遇到问题,我正在寻求建议关于我没有找到哪些库或如何使用我已经发现可以实现这样的目标。
更新:我最终购买了AutomatedQA's docking library。我认为这是最好的。更多详情请参见下文。2011 年 7 月更新 2: 这个问题查看了可用于 Delphi/C++Builder 的每个对接库,因此我试图使其保持最新。我知道的两个变化: SmartBear,现在拥有 AutomatedQA,拥有end-of-lifed AutomatedQA's docking library。这是我推荐购买的一款。他们正在考虑将其开源。 我在 DevExpress 对接中遇到的一个问题(这使得它不值得购买)是它缺乏对 VS2008/10 风格的对接的支持,它带有一个对接小部件、拖动时的透明覆盖等。They are now implementing it。因此,由于 AQDocking 不再出售,如果我现在问这个问题,我接受的答案是购买 DevExpress Docking。
我找到了以下库。这是一个概述:
内置 VCL 对接
这允许表单停靠在其他表单或 TWinControls 上,但看起来很基本。使用 XOR 绘制轮廓拖动表单,这在 Vista 和 Win7 上效果很差。有一个用于选项卡式停靠表单的 TTabDockSet 控件,但我无法弄清楚如何控制停靠表单的标题在停靠后如何呈现。我认为实现并排停靠必须手动完成,动态创建新的停靠站点面板。 RAD Studio IDE 的停靠窗口比这个更漂亮(例如,拖动表单时的透明矩形),这很奇怪,因为我认为它使用了 VCL 停靠支持。
JVCL docking
这看起来更像是内置 VCL 对接的一个不错的解决方案。它支持停靠在任何边缘或客户端上,并在窗体停靠的位置显示一个字母混合矩形。
它似乎有很多问题(允许在第一个表单上放置第二个表单,但会冻结程序)并且没有内置的选项卡式停靠支持或任何类型的放置位置小部件。
LMD Docking Pack
这看起来很有希望:虽然它似乎没有直接停靠表单,但它有停靠面板和控件/框架放置在上面。现有的表格可以迁移到框架中。它还具有停靠小部件和选项卡式停靠支持。
但是,演示似乎很不可靠。我已经安装了最新的评估版本,并创建了一个带有停靠站点和几个面板的新项目,然后按 Run 会导致以下结果:
这在表单组件流中崩溃。目视检查 DFM 文件并没有显示任何错误,但是可能导致它的布局信息有一个不透明的二进制 blob。这在评估版中并不是特别令人鼓舞。
DevExpress ExpressDocking
我对此寄予厚望:我以前从未使用过任何 DevExpress 控件,但它们的声誉很好。但他们的演示程序确实令人失望:
该控件闪烁,并且似乎与 Windows 的主题不匹配,即使使用 XP 样式也是如此。它确实有选项卡式对接,但它使用异或轮廓——这在 XP 或 Vista 上不能很好地工作。它也没有任何类型的停靠小部件。坦率地说,它看起来自 Windows XP 时代以来就没有更新过。 2011 年 7 月更新: This is being improved。
AutomatedQA / SmartBear docking library
这是迄今为止所有库中最有前途的。
我经常使用AQTime,这是一个出色的分析器,似乎是使用他们自己的对接库编写的,并且运行良好。但是,对接库试用下载的最新版本适用于 RAD Studio 2009,安装到 2010 的建议是它不受支持,您应该重新编译源代码。该演示没有源代码,我们没有RS2009,除非我们这样做,否则安装程序拒绝安装,即使我们设法安装它,我们也无法使用它,因为我们需要重新编译来源不存在。
我已与他们的支持团队取得联系,他们将我指向this thread。我还找到了customers asking much the same thing 的另一个线程。我已经回复并希望听到更好的消息。我不想推荐我们购买我无法评估的产品,尤其是当我们的 IDE 不支持它时。
更新:我最终购买了这个库。尽管评估存在问题(它在 D2007 中工作,我有一份副本),但它似乎是所有库中最容易使用的,也是最强大的——例如,为它编写主题很容易。如果您也需要选择停靠库,我绝对会推荐它。
2011 年 7 月更新: This library is no longer being sold, but may be open-sourced soon。
我错过了什么?
这就是我目前所发现的一切。现在呢?
我是否错过了 Delphi / C++ Builder / RAD Studio 2010 的任何好的对接库? 到目前为止,我是否遗漏了我查看过的库中的任何功能?像“你错过了 FooBar”或“JVCL 确实有一个停靠小部件,你可以像这样使用它......”这样的回答会非常棒。 下一步你会推荐什么?感谢您的意见:)
【问题讨论】:
+1。确实是很好的研究。您错过了 TMS 组件。我无法评论易用性或性能,但它们往往具有“好看”的组件。对接组件可以在tmssoftware.com/site/advtoolbar.asp找到 我正准备为 DevExpress 库辩护,直到我自己尝试了演示。与他们为 .net 设置的 XtraBars 控件集相比,它绝对看起来“更老”。但是对接指示器的事情已经被要求并被接受——但还没有发布日期。如果您使用他们的蒙皮支持,它看起来会稍微好一些。 FWIW 我们订阅了 DevExpress VCL,它确实非常好 - 但它在某些领域确实落后于它的 .net 表亲。 嗨 Lieven - TMS 控件是否支持表单停靠?我下载了演示,它似乎只有工具栏和菜单。 更新到 2011 年 7 月的更新:2013 年 4 月(!)Smartbear 说“我们现在有一个内部协议,可以发布源代码供社区使用。” smartbear.com/forums/f57/t46093/tp2/adl-end-of-life#79234 【参考方案1】:我使用过 JCL,我有 LMD、DevExpress 和自动化 QA 对接库。
您会发现最能满足您需求的是 AutomatedQA Docking Library。我在我的一个项目中使用它。
下一步,购买 AutomatedQA 库 :)
来自满意的客户。
【讨论】:
【参考方案2】:我还没有找到一个库可以做我想做的所有事情,所以在做了一些试验后,我发现我可以通过使用 Native VCL Docking (NVCLD) 控件和一系列自定义修改来完成我想要做的几乎所有事情和一些额外的控件。
以下是我在让 NVCLD 以我想要的方式工作时遇到的问题。我在版本之间移植没有太多问题,但那是因为我也有 src。
如果您不想自己动手,或者您真的想使用 3rd 方库,那么您可能可以停止阅读本文的其余部分。 :)
其他组件:
TDockPanel
这个经过大量修改的对接面板是我的系统的主力。我在网上找到了原始版本,但后来对其进行了修改,以便为我的需要提供更大的灵活性。
自定义停靠表单(基本表单)
通过为我的停靠表单使用自定义基类并在需要时继承它,我可以对所有后代表单进行较少的修改。
自定义修改
这些是对 NVCLD 组件本身的 .pas 文件的修改。由于从 D2009 开始对基本控件进行了一些增强,这些修改中的大部分不再需要进行。您应该能够只创建一个新的后代并在那里实现更改,而不是直接修改默认的 src 文件。
透明对接表单
默认情况下(肯定是 2009 年之前)NVCLD 不支持透明表单移动。几年前发布了一个 JVCL 补丁,该补丁添加了对 JVCL 的支持,很容易将其合并到 NVLCD 补丁中。
对接管理器
默认停靠管理器(肯定是 2009 年之前的)不允许更新/自定义按钮图像或停靠标题更改。这在 D2009 中得到了纠正,我相信当必要的方法变为虚拟时。
标签式对接
为了支持附加停靠组件,我需要修改 DockTabSet.pas 文件以支持附加组件使用的附加停靠属性。当对接管理器如前所述进行修改时,大部分问题已得到纠正。
正如我所说的,我直接对 Delphi Src 文件进行了大部分更改,对于较新版本的 Delphi,您不需要这样做。我的观点是,通过预先做一些工作,您可以拥有一个相当强大的对接系统,而无需使用 3rd 方库。并不是说它们中的任何一个有什么问题,但我宁愿不使用它们,除非我别无选择或没有时间让它按我的方式工作。
【讨论】:
谢谢瑞恩!是否可以为其中一些更改提供源 sn-ps,或者提供指向我可以找到更多信息的链接?我想购买组件集的主要原因是避免重新发明***......还有太多其他工作要做:p @David M:当然!我可以尝试创建一个带有 src 的小型演示应用程序来展示我所做的和我在说什么。代码是一个大型项目的一部分,所以请给我一两天的时间来提出一些建议。 @David M:这需要我多花点时间。因为我在为你准备一个演示时遇到了一些麻烦。我已经设法编写了大约一半的演示。但是我在白天找不到足够的时间来做这件事。工作一直在阻碍。 没关系,谢谢!我最终购买了 AQ 对接库 - 评估在 D2007 中有效,看起来还不错。它还可以节省大量重新发明***。但是,如果你碰巧有时间做这个,我仍然会对代码感兴趣,只是为了兴趣/技术。【参考方案3】:我是一名绝地 JVCL 开发人员,我在自己的商业内部项目中使用过 JvDocking,发现它可靠可靠。
而且,它是免费的。它很容易扩展。它创建的外观和感觉与 Visual Studio 2008 时代对接的外观和感觉大致相同。
【讨论】:
你如何实现诸如停靠小部件之类的东西?你必须自己编码还是内置的?在问这个问题的时候,JvDocking 看起来很基本(而且有问题)——不过那是几年前的事了。 像 Visual Studio 这样的小部件可能会在停靠区域上使用无边界 alpha 混合绘画来完成。我认为我可以将它添加到 JvDocking,但这是相当多的自定义绘画代码。任何不熟悉 GDI 绘制和处理原始鼠标移动消息的人都会觉得这样做会很有趣。 全面披露:JvDocking 中存在一些错误,但并不比任何其他停靠库差。他们都在做复杂的事情,有时事情会变得很奇怪。 Visual Studio 克隆除了如何使用闪屏外还教了很多东西。出色且精心准备的对接演示。 JVCL Docking 非常棒,因为它解决了三件事 1. 保存停靠信息 2. 流畅的拖放体验 3. 运行时创建的窗口停靠能力示例。比 RAD Studio XE5 好得多。 “Macrosoft Visual Studio”简直太搞笑了。以上是关于推荐 Delphi / C++Builder 的对接库?的主要内容,如果未能解决你的问题,请参考以下文章
让 C++Builder/Delphi 在启动时创建 TForms,还是手动创建?
在 Delphi & C++ Builder 中安装 VCL 组件
如何对 Delphi/C++Builder 中的设计时包进行故障排除?
我应该在 Delphi 而不是 C++ Builder 中编写组件吗?如何向组件添加事件?
c++builder 重载WindowProcWndProc 截获消息(比Delphi多一个Message Map方法)