Delphi中的设计时拖放?

Cob*_*ger 7 delphi controls design-time drag-and-drop

在Delphi 2006(我认为)介绍TFlowPanel和TGridPanel之前,我做了一个概念相似的控件.它仍然做了一些控件不能做的事情,当我将代码升级到Delphi 2009时,我决定添加一些增强功能.

现在,子控件的顺序由其创建顺序决定.FlowPanel和GridPanel使用ControlIndex和其他过滤属性显示更好的方法,但我想知道是否有办法在设计时处理拖放重新排序?据我所知,拖动编辑控件并将其拖放到我的面板上并不会调用我在设计时可以访问的任何内容.

我想要一种方法来直接检测掉落操作,或者可能检测控件何时被移动,以便我可以确定它应该去哪里.

有任何想法吗?

更新: 好的,让它工作.容器控件已经重写AlignControls来管理控件的放置.拖动嵌套控件并将其删除时,再次调用AlignControls.然后,我将控件的新坐标与列表中的其他控件进行比较,并将其移动到适当的位置.

我必须解决几个问题(主要与AlignControls的许多调用有关),但基本概念很简单.感谢所有评论者提供的所有帮助.

Rob*_*edy 5

您无法拖动表单上已有的控件并将其拖放到面板上.拖动仅用于移动控件,而不用于更改其父控件.要更改父级,剪切和粘贴.

如果控件已经在面板上,并且您想将其移动到面板上的其他位置,则面板可以通过覆盖该TWinControl.AlignControls方法来控制布局.移动控件时,SetBounds会调用其方法,并且在其中发生的事情是它调用AlignControl(Self)其父窗口.那叫AlignControls.看在Controls.pas,你会发现这是一个复杂的方法,但它就是负责对控制儿童的布局,这就是你打算改变什么.