Comprender las operaciones de arrastrar y soltar

"Arrastrar y soltar" es mantener presionado el botón del mouse de la computadora mientras se mueve el mouse, y luego soltar el botón para soltar el objeto. Delphi facilita la programación de arrastrar y soltar en aplicaciones.

Realmente puede arrastrar y soltar desde / hacia donde desee, como de un formulario a otro, o desde el Explorador de Windows a su aplicación.

Ejemplo de arrastrar y soltar

Inicie un nuevo proyecto y coloque un control de imagen en un formulario. Utilice el Inspector de objetos para cargar una imagen (propiedad de imagen) y luego configure el DragMode propiedad a dmManual. Crearemos un programa que permita mover un tiempo de ejecución de control de TImage utilizando la técnica de arrastrar y soltar.

DragMode

Los componentes permiten dos tipos de arrastre: automático y manual. Delphi usa la propiedad DragMode para controlar cuándo el usuario puede arrastrar el control. El valor predeterminado de esta propiedad es dmManual, lo que significa que no está permitido arrastrar componentes alrededor de la aplicación, excepto en circunstancias especiales, para las cuales tenemos que escribir el código apropiado. Independientemente de la configuración de la propiedad DragMode, el componente se moverá solo si se escribe el código correcto para reposicionarlo.

OnDragDrop

El evento que reconoce arrastrar y soltar se llama evento OnDragDrop. Lo usamos para especificar qué queremos que suceda cuando el usuario suelta un objeto. Por lo tanto, si queremos mover un componente (imagen) a una nueva ubicación en un formulario, tenemos que escribir código para el controlador de eventos OnDragDrop del formulario.

El parámetro Source del evento OnDragDrop es el objeto que se descarta. El tipo del parámetro fuente es TObject. Para acceder a sus propiedades, tenemos que convertirlo al tipo de componente correcto, que en este ejemplo es TImage.

Aceptar

Tenemos que usar el evento OnDragOver del formulario para indicar que el formulario puede aceptar el control de TImage que queremos colocar en él. Aunque el parámetro Aceptar está predeterminado en Verdadero, si no se proporciona un controlador de eventos OnDragOver, el control rechaza el objeto arrastrado (como si el parámetro Aceptar se cambiara a Falso).

Ejecute su proyecto e intente arrastrar y soltar su imagen. Observe que la imagen permanece visible en su ubicación original mientras se mueve el puntero del mouse. No podemos usar el procedimiento OnDragDrop para hacer que el componente sea invisible mientras se realiza el arrastre porque este procedimiento se llama solo después de que el usuario suelta el objeto (si es que lo hace).

DragCursor

Si desea cambiar la imagen del cursor presentada cuando se arrastra el control, use la propiedad DragCursor. Los valores posibles para la propiedad DragCursor son los mismos que para la propiedad Cursor. Puede usar cursores animados o lo que quiera, como un archivo de imagen BMP o un archivo de cursor CUR.

BeginDrag

Si DragMode es dmAutomatic, el arrastre comienza automáticamente cuando presionamos un botón del mouse con el cursor en el control. Si ha dejado el valor de la propiedad Dragmage Mode de TImage en su valor predeterminado de dmManual, debe usar los métodos BeginDrag / EndDrag para permitir el arrastre del componente. Una forma más común de arrastrar y soltar es establecer DragMode en dmManual e iniciar el arrastre manejando eventos de mouse-down.

Ahora, usaremos el Ctrl + MouseDown combinación de teclado para permitir el arrastre. Configure el DragMode de TImage nuevamente en dmManual y escriba el controlador de eventos MouseDown de esta manera:

BeginDrag toma un parámetro booleano. Si pasamos True (como en este código), el arrastre comienza de inmediato; si es falso, no comienza hasta que movemos el mouse una corta distancia. Recuerda que requiere la tecla Ctrl.