Antes de que Delphi 2006 (creo) presentara TFlowPanel y TGridPanel, hice un control similar en concepto. Todavía hace un par de cosas que esos controles no hacen, y cuando actualicé mi código a Delphi 2009, decidí añadir un par de mejoras a eso también.Arrastre y suelte en tiempo de diseño en Delphi?
En este momento, el orden de los controles secundarios está determinado por su orden de creación. El FlowPanel y el GridPanel muestran una mejor manera con ControlIndex y otras propiedades filtradas, pero me preguntaba si hay una forma de manejar el reordenamiento de arrastrar y soltar en tiempo de diseño. Por lo que puedo decir, arrastrar un control de edición y soltarlo en mi panel no llama a nada a lo que pueda acceder en el momento del diseño.
Estaba medio fantaseando sobre una forma de detectar la operación de caída directamente, o quizás detectar cuándo se mueve un control para poder determinar dónde debería ir.
¿Alguna idea?
Actualización: OK, lo tengo trabajando. El control del contenedor ya estaba anulando AlignControls para administrar la ubicación de los controles. Cuando arrastra el control anidado y lo suelta, se llama nuevamente AlignControls. Luego comparé las nuevas coordenadas del control con los otros controles en la lista y lo moví a la posición apropiada.
Hubo un par de problemas que tuve que solucionar (principalmente relacionados con las muchas llamadas a AlignControls) pero el concepto básico es bastante simple. Gracias a todos los comentaristas por toda la ayuda.
"el orden de los controles secundarios está determinado por su orden de creación" ¿Qué es el pedido? Orden de tabulación? ¿Desea hacer que las pestañas se ordenen de arriba a abajo en un panel? – Serguzest
Ahora, si selecciona el panel y luego agrega controles, los controles se distribuirán en el orden en que los agregó. Para reordenar, cortaría y pegaría o vería el formulario como texto y los cambiaría. Ahora he agregado una propiedad ControlIndex a la TFlowPanel pero quiero que los usuarios del control puedan arrastrar y soltar para reordenar. Así que tome Edit2 y colóquelo a la izquierda de Edit1 y mágicamente intercambien posiciones en el panel. –