我正在使用Delphi的“常规”对接(使用DockSite = True和UseDockManager = True)。现在有几个DockSite控件和几个可停靠的表单。但是,并非每个可停靠的表单都应该放在每个停靠站点中。
表格知道他们应该停靠什么样的控制;控制,OTOH,不知道接受与否的形式。
我现在的问题是,有几个事件可以取消拖放(或拖动/停靠)操作:DragOver,StartDock等等。但这些都发生在'接收'侧,从不在被丢弃的控制的一面;这就是我想拥有它的地方 - 因此停靠的表单可以拒绝停靠在某个控件上。
是否有这样的事件,我是否会忽略某些事情,或者我是否必须以不同的方式解决这个问题?
答案 0 :(得分:1)
我想我应该将此作为答案添加而不仅仅是评论。为自定义表单创建一个基本表单,并将您的逻辑放入其中。然后每个控件只需要知道如何与一个表单类进行交互。您制作的每个新停靠表单都必须从此基本表单下降。这样做的好处是您不需要自定义控件版本,因为所有内容都可以通过标准事件处理程序来处理。
答案 1 :(得分:0)
为正在停靠的控件/表单触发OnStartDock
事件,而不是停靠的DockSite控件。因此,您可以为可停靠表单分配OnStartDock
事件处理程序,或者更好地覆盖虚拟DoStartDock()
方法。