我如何知道控件的停靠位置,以及如何防止停靠?

时间:2011-09-06 14:32:50

标签: delphi vcl docking

我正在使用Delphi的“常规”对接(使用DockSite = True和UseDockManager = True)。现在有几个DockSite控件和几个可停靠的表单。但是,并非每个可停靠的表单都应该放在每个停靠站点中。

表格知道他们应该停靠什么样的控制;控制,OTOH,不知道接受与否的形式。

我现在的问题是,有几个事件可以取消拖放(或拖动/停靠)操作:DragOver,StartDock等等。但这些都发生在'接收'侧,从不在被丢弃的控制的一面;这就是我想拥有它的地方 - 因此停靠的表单可以拒绝停靠在某个控件上。

是否有这样的事件,我是否会忽略某些事情,或者我是否必须以不同的方式解决这个问题?

2 个答案:

答案 0 :(得分:1)

我想我应该将此作为答案添加而不仅仅是评论。为自定义表单创建一个基本表单,并将您的逻辑放入其中。然后每个控件只需要知道如何与一个表单类进行交互。您制作的每个新停靠表单都必须从此基本表单下降。这样做的好处是您不需要自定义控件版本,因为所有内容都可以通过标准事件处理程序来处理。

答案 1 :(得分:0)

为正在停靠的控件/表单触发OnStartDock事件,而不是停靠的DockSite控件。因此,您可以为可停靠表单分配OnStartDock事件处理程序,或者更好地覆盖虚拟DoStartDock()方法。