【发布时间】:2010-10-28 16:38:47
【问题描述】:
在 Delphi 2006(我认为)引入 TFlowPanel 和 TGridPanel 之前,我做了一个概念相似的控件。它仍然做了一些这些控件不做的事情,当我将代码升级到 Delphi 2009 时,我决定也添加一些增强功能。
现在,子控件的顺序由它们的创建顺序决定。 FlowPanel 和 GridPanel 显示了使用 ControlIndex 和其他过滤属性的更好方法,但我想知道是否有办法在设计时处理拖放重新排序?据我所知,将编辑控件拖放到我的面板上不会调用我在设计时可以访问的任何内容。
我半幻想着有一种方法可以直接检测放置操作,或者检测控件何时移动,以便我可以确定它应该去哪里。
有什么想法吗?
更新: 好的,让它工作。容器控件已经覆盖了 AlignControls 来管理控件的放置。当您拖放嵌套控件时,将再次调用 AlignControls。然后,我将控件的新坐标与列表中的其他控件进行比较,并将其移动到适当的位置。
我必须解决几个问题(主要与对 AlignControls 的许多调用有关),但基本概念很简单。感谢所有评论者的帮助。
【问题讨论】:
-
"子控件的顺序由它们的创建顺序决定"顺序是什么?标签顺序 ?你想让它们在面板中从上到下排序吗?
-
现在,如果您选择面板然后向其中添加控件,则控件将按照您添加它们的顺序排列。要重新排序,您可以剪切和粘贴表单,或者将表单作为文本查看并移动它们。我现在添加了一个 TFlowPanel 的 ControlIndex 属性,但希望控件的用户能够拖放以重新排序。因此,抓住 Edit2 并将其放到 Edit1 的左侧,它们会神奇地交换面板上的位置。
标签: delphi controls drag-and-drop design-time