如何像Delphi IDE一样进行拖放并停靠,包括标签和选项卡?

6
我希望我的应用程序中的拖放和停靠功能能够像Delphi IDE一样良好地工作(即能够拖动对象检查器/结构视图并将其停靠在合适的位置)。我已经成功地将表单停靠到PageControl中,但想知道是否有人知道如何让它与小的关闭按钮、固定按钮等一起工作。
我也想知道Delphi IDE使用哪些组件来实现这一点。
我提出这个问题的原因是我想制作更高级的视频,介绍如何实现这一点。我之前做过两个视频,分别是这里这里

1
可能是如何制作类似IDE中的可停靠窗体?的重复问题。 - Ken White
2
Alister的问题清晰易懂,但Ken发布的重复链接问了一堆无关的琐碎问题。它似乎在询问一些微妙的细节,与其主题不符。我认为这个问题写得更好。如果这个问题被关闭,我会编辑原始问题,因为它充满了噪音。 - Warren P
1
@WarrenP:更不用说这个问题有更好的答案了! ;) - Andreas Rejbrand
这个链接的重复问题的答案很好,只是问题本身不太清楚。 - Warren P
1
请查看此文章:http://edn.embarcadero.com/article/33446 - VibeeshanRC
显示剩余5条评论
1个回答

8
您可以使用JVCL JvDocking组件在几乎任何版本的Delphi中进行拖放和停靠。它是免费且开源的。使用名为VID(Visual InterDev)样式的停靠样式,可获得带有引脚和关闭按钮的样式,该样式随JvDocking一起提供。

enter image description here

已经有一堆商业替代品,而且Delphi内置了一些支持,但我发现这些支持不足以满足我的需求。虽然Delphi IDE拥有自己的内部停靠库,但选项卡支持非常有限,速度缓慢,并且在我的主观意见中,无效。
然而,即使在古老的Delphi 7及以上版本上,JvDocking也提供了VCL停靠所提供的所有功能,甚至更多,因此忽略内置的VCL功能没有问题,就像TStringGrid与真正的Grids一样。
使用JvDocking的步骤:
1. 在主机表单上放置停靠服务器和停靠样式对象,并将它们连接起来。 2. 在客户端(要停靠的表单)上放置停靠客户端组件,并将其连接到停靠样式。 3. 配置停靠服务器的属性。 4. 运行应用程序。创建一个表单。现在将客户端表单拖到由停靠服务器制作的可停靠区域。看它漂亮地停靠。 有关代码演示中的停靠,请参见JVCL示例文件夹中的JvDocking演示。
更新

或者您可以使用自Delphi XE和XE2以来内置的VCL。XE和XE2包括一个名为dockex.dpr的停靠演示项目。

在Win7 / Vista上,演示位于:

C:\ Users \ Public \ Documents \ RAD Studio \ 9.0 \ Samples \ Delphi \ VCL \ Docking

在Win XP上查找演示:

C:\ Documents and Settings \ All Users \ Documents \ RAD Studio \ 9.0 \ Samples \ Delphi \ VCL \ Docking

你还应该查看VCL中的TDockTabSet文档和评论中链接的EDN文章,其中包含可以在此处下载的源代码。在我不起眼的意见中,Jedi JvDocking比Delphi附带的Docking Demo更专业和流畅,但内置功能具有无需安装任何其他内容即可工作的优势。我刚刚尝试了DockTabSet演示和内置停靠演示,它们很慢,绘画很丑陋并且闪烁。JvDocking看起来很专业。由你决定。

不错的回答,但是 TDockTabSet 现在提供了选项卡式停靠和“抓手栏”,是吗?(实际上,我认为它提供了你所提到的所有“缺失”的功能,或者是我自己漏掉了什么?(双关语意味着笑))。 - Ken White
我已经尝试过TDockTabSet和内置的VCL dockex演示,我的真实想法是它们存在故障、丑陋,并且需要大量工作才能放入我的应用程序中。此外,我似乎无法让它们进行实际的“Tabset”对接。演示声称可以展示,但实际上并不能。我可以将两个浮动窗口对接到一个浮动的Tabset上,但我无法像IDE中的Tabset docks那样获得选项卡。 - Warren P

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