4D v16.3

Arrastrar y soltar

Inicio

 
4D v16.3
Arrastrar y soltar

Arrastrar y soltar  


 

 

4D dispone de funciones integradas que le permiten arrastrar y soltar objetos en sus formularios y aplicaciones. Es posible arrastrar y soltar un objeto sobre otro, ubicado en la misma ventana o en otra ventana. En otras palabras, usted puede arrastrar y soltar al interior de un proceso o entre diferentes procesos.

Igualmente usted puede arrastrar y soltar objetos entre formularios 4D y otras aplicaciones y viceversa. Por ejemplo, es posible arrastrar y soltar un archivo de imagen GIF en un campo imagen 4D. También es posible seleccionar texto en una aplicación de procesamiento de palabras y soltarla en una variable de texto 4D.

Finalmente, es posible soltar objetos directamente en la aplicación sin tener necesariamente un formulario de fondo. El Método de base On Drop puede utilizarse para administrar la acción de arrastrar y soltar en este caso. Esto significa, por ejemplo, que puede abrir un documento 4D Write soltándolo en el icono de la aplicación 4D

Nota: como introducción, asumimos que una acción arrastrar y soltar “transporta” datos de un punto a otro. Más adelante, veremos que arrastrar y soltar también puede ser una metáfora ara todo tipo de operación.

Para arrastrar y soltar un objeto sobre otro objeto, debe seleccionar la Propiedad arrastrable para ese objeto en la ventana de la Lista de propiedades. En una operación arrastrar y soltar, el objeto que se arrastra es el objeto fuente.

Para hacer que un objeto sea soltable, es decir que el objeto pueda ser el destino de una operación de arrastrar y soltar, debe seleccionar la propiedad soltable para ese objeto en la Lista de propiedades. En una operación arrastrar y soltar, el objeto que recibe los datos es el objeto de destino.

Arrastrar automático y Soltar automático:

Estas propiedades adicionales están disponibles para campos y variables de tipo texto, combo boxes y list boxes. La opción Soltar automático también está disponible para campos y variables tipo imagen. Pueden utilizarse para activar un modo arrastrar y soltar automático basado en copiar el contenido (la acción arrastrar y soltar ya nos es administrada por los eventos de formulario 4D). Por favor consulte el párrafo "Arrastrar y saltar automático" al final de esta sección.

Por defecto, los objetos creados recientemente no poseen ninguna de estas propiedades. Es su decisión seleccionar estas propiedades.

Todos los objetos en un formulario de entrada o en un diálogo, pueden ser definidos como arrastrables y soltables. Los elementos individuales de un array (por ejemplo, un área de desplazamiento), los elementos de una lista jerárquica o las filas en una list box pueden ser arrastrables y soltables. Por el contrario, usted puede arrastrar y soltar un objeto sobre un elemento individual de un array o de una lista jerárquica o una línea de un list box. Sin embargo, no puede arrastrar y soltar objetos del área de detalle de un formulario de salida.

Igualmente puede administrar arrastrar y soltar en la aplicación, fuera de todos los formularios, utilizando el Método de base On Drop.

Fácilmente puede crear una interfaz de usuario arrastrar y soltar, porque 4D le permite utilizar todo tipo de objeto activo (campo o variable) como objetos fuente o de destino. Por ejemplo, usted puede arrastrar y soltar un botón.

Notas:

  • Para arrastrar un texto o un botón que tiene la propiedad "arrastrable," primero debe presionar la tecla Alt (Windows) u Opción (Mac OS).
  • Por defecto, en el caso de campos y variables de imagen, la imagen y su referencia son arrastrados. Si usted sólo quiere arrastrar la referencia de la variable o campo, primero presione la tecla Alt (Windows) u Opción (Mac OS).
  • Cuando en un objeto de tipo List box, las propiedades “Arrastrable” y “Filas desplazables” están definidas simultáneamente, la propiedad “Filas desplazables” tiene prioridad cuando se mueve una fila. En este caso no es posible arrastrarlo.

Un objeto que es arrastrable y soltable también puede ser soltable en sí mismo, a menos de que rechace la operación. Para más detalles, consulte los párrafos siguientes.

La siguiente imagen muestra la ventana de la Lista de propiedades con las propiedades Arrastrable y Soltable definidas para el objeto seleccionado:

La gestión de arrastrar y soltar por programación está basada en tres eventos de formulario: On Begin Drag Over, On Drag Over y On Drop.

Note que el evento On Begin Drag Over se genera en el contexto del objeto fuente del arrastrar mientras On Drag Over y On Drop se envían al objeto de destino únicamente.

Para que la aplicación procese estos eventos, deben haber sido seleccionados de una forma adecuada en la Lista de Propiedades:

El evento de formulario On Begin Drag Over es seleccionable para todos los objetos de formulario que puedan arrastrarse. Se genera en todos los casos donde el objeto tenga la propiedad Arrastrable.

A diferencia del evento de formulario On Drag Over, On Begin Drag Over se llama dentro del contexto del objeto fuente de la acción arrastrar. Puede llamarse desde el método del objeto fuente o desde el método del formulario del objeto fuente.

Este evento es útil para la gestión avanzada de la acción arrastrar. Puede utilizarse para:

  • Obtener los datos y las firmas presentes en el portapapeles (por el comando GET PASTEBOARD DATA).
  • Añadir los datos y las firmas al portapapeles (por el comando APPEND DATA TO PASTEBOARD)
  • Utilizar un ícono personalizado durante la acción de arrastrar (vía el comando SET DRAG ICON).
  • Aceptar o rechazar el arrastrar vía $0 en el método del objeto arrastrado. Para indicar que la acción arrastrar es aceptada, el método del objeto fuente debe devolver 0 (cero); por lo tanto usted debe ejecutar $0:=0. Para indicar que las acciones de arrastre son rechazadas, el método o el objeto fuente debe devolver -1 (menos 1); usted debe por lo tanto ejecutar $0:=-1. Si no se devuelve resultado, 4D considera que el arrastrar es aceptado.

Los datos de 4D se colocan en el portapapeles antes de llamar al evento. Por ejemplo, en el caso de arrastre sin la acción Arrastre automático, el texto arrastrado ya está en el portapapeles cuando se llama el evento.

El evento On Drag Over se envía repetidamente al objeto de destino cuando el puntero del ratón se mueve sobre el objeto. En respuesta a este evento, usted generalmente:

  • Llama al comando DRAG AND DROP PROPERTIES, el cual le informa sobre el objeto fuente.
  • Dependiendo de la naturaleza y tipo del objeto de destino (cuyo método de objeto está siendo ejecutado) y el objeto fuente, usted acepta o rechaza el arrastrar y soltar.

Para aceptar arrastrar, el método del objeto de destino debe devolver 0 (cero), de manera que usted escribe $0:=0. Para rechazar el arrastrar, el método de objeto debe devolver -1 (menos uno), de manera que usted escribe $0:=-1. Durante un evento On Drag Over, 4D trata el método del objeto como una función. Si no devuelve ningún resultado, 4D asume que se acepta arrastrar.

Si acepta el arrastrar, el objeto de destino se activa. Si lo rechaza, el objeto de destino permanece inactivo. Aceptar el arrastrar no significa que los datos arrastrados sean insertados en el objeto de destino. Sólo significa que si el botón del ratón fue liberado en este punto, el objeto de destino aceptaría los datos arrastrados.

Si no procesa el evento On Drag Over para un objeto soltable, el objeto se activará para todas las operaciones de arrastrar, sin importar la naturaleza y tipo de los datos arrastrados.

El evento On Drag Over le permite controlar la primera fase de una operación de arrastrar y soltar. No sólo puede probar si el tipo de los datos arrastrados es compatible con el objeto de destino y luego aceptar o rechazar el arrastre; usted puede simultáneamente notificar al usuario de este hecho, porque 4D activa o no el objeto de destino, en función de su decisión.

El código que trata un evento On Drag Over debe ser corto y ejecutarse rápidamente, porque el evento es enviado repetidamente al objeto actual de destino, debido a los movimientos del ratón.

Advertencia: a partir de la versión 11 de 4D, si el arrastrar y soltar es un arrastrar y soltar interproceso, lo cual significa que el objeto fuente está ubicado en un proceso (ventana) diferente de la del objeto de destino, el método del objeto de destino para un evento On Drag Over se ejecuta en el contexto del proceso de destino. Para conocer el valor de los elementos arrastrados, debe utilizar los comandos de comunicación interproceso. Generalmente es preferible en ese caso utilizar el evento On Begin Drag Over y los comandos del tema .

On Drop  

El evento On Drop se envía al objeto de destino (una sola vez) cuando el puntero del ratón se libera sobre el objeto. Este evento es la segunda fase de la operación arrastrar y soltar, en la cual usted realiza una operación en respuesta a la acción del usuario.

Este evento no se envía al objeto si el arrastrar no se ha aceptado durante los eventos On Drag Over. Si procesa el evento On Drag Over para un objeto y rechaza un arrastrar, no ocurre el evento On Drop. Si durante el evento On Drag Over usted ha probado la compatibilidad de tipos de datos entre los objetos fuente y destino y ha aceptado un posible soltar, no necesita probar nuevamente los datos durante On Drop. Usted ya sabe que los datos son compatibles con el objeto de destino.

Un aspecto interesante de la implementación de arrastrar y soltar es que 4D le permite hacer lo que usted quiera. Ejemplos:

  • Si un elemento de una lista jerárquica se suelta sobre un campo de tipo texto, usted puede insertar el texto del elemento de la lista al comienzo, al final, o en la mitad del campo de texto.
  • Su formulario contiene un botón de imagen de dos estados, el cual representa una canasta vacía o llena. Soltar un objeto sobre ese botón podría significar (desde el punto de vista de la interfaz del usuario) “suprimir el objeto que ha sido arrastrado y soltado en la canasta.” Acá, arrastrar y soltar no transporta datos de un punto a otro; en lugar de eso, realiza una acción.
  • Arrastrar un elemento de un array de una ventana flotante a un objeto en un formulario podría significar “mostrar en esta ventana el registro del cliente cuyo nombre usted acaba de arrastrar y soltar desde la ventana flotante listando los clientes almacenados en la base de datos”.
  • Etc.

La interfaz de arrastrar y soltar de 4D es un framework que le permite a cualquier usuario implementar todas las metáforas de interfaz de usuario que usted pueda imaginar.

Los comandos DRAG AND DROP PROPERTIES devuelven:

  • Un puntero hacia el objeto arrastrado (campo o variable)
  • El número de elemento, si el objeto arrastrado es un elemento del Array o un elemento de una lista
  • El número del proceso fuente.

El comando Drop position devuelve el número o la posición del elemento objetivo si el objeto de destino es un array (es decir, un área de desplazamiento) una lista jerárquica, un texto o un combo box, como también el número de columna si el objeto es una list box.

Los comandos como RESOLVE POINTER y Type son útiles para probar la naturaleza y el tipo de objeto fuente.

Cuando la operación arrastrar y soltar está destinada a copiar los datos arrastrados, la funcionalidad de estos comandos depende de cuántos procesos estén involucrados:

  • Si el arrastrar y soltar está limitado a un proceso, utilice estos comandos para realizar las acciones correspondientes (es decir, simplemente asignar el objeto fuente al objeto de destino).
  • Si el arrastrar y soltar es interproceso, debe tener cuidado cuando acceda a los datos arrastrados; debe acceder a la instancia de datos del proceso fuente. Si los datos arrastrados provienen de una variable, utilice GET PROCESS VARIABLE para obtener el valor correcto. Si los datos arrastrados provienen de un campo, recuerde que el registro actual de una tabla probablemente no es el mismo para los dos procesos, de manera que debe acceder al registro correcto. Por lo general se recomienda en este caso utilizar los comandos del tema y el evento On Begin Drag Over.
Si el arrastrar y soltar no está destinado a mover datos, sino a crear metáforas de interfaz para una operación en particular, usted puede hacer todo lo que quiera.

Si las operaciones arrastrar y soltar implican el movimiento de datos heterogéneos o de documentos entre dos aplicaciones 4D o una aplicación 4D y una tercera aplicación, los comandos del tema "Portapapeles" le ofrecerán las herramientas necesarias.

De hecho, estos comandos puede utilizarse para administrar el copiar/pegar y arrastrar y soltar de datos. 4D utiliza dos portapapeles: uno para datos copiados (o cortados), el cual es el portapapeles actual, y el otro para los datos que están siendo arrastrados y soltados. Estos dos portapapeles son administrados utilizando los mismos comandos. Usted accede a uno o a otro dependiendo del contexto.

Para mayor información sobre la utilización de los comandos del tema "Portapapeles" para operaciones de arrastrar y soltar, por favor consulte la sección .

Las áreas de texto (campos, variables, combo boxes y list boxes) como también objetos de imagen permiten el arrastrar y soltar automático, es decir el movimiento o copia de una selección de texto o imagen de un área a otra en un solo clic. Puede utilizarse en la misma área 4D, entre dos áreas 4D, o entre 4D y otra aplicación, por ejemplo WordPad.

Nota: en el caso de arrastrar y soltar automático entre dos áreas 4D, los datos son desplazados, en otras palabras, son eliminados del área fuente. Si quiere volver a copiar los datos, mantenga presionadas Ctrl (Windows) u Opción (OS X) durante la acción (bajo OS X, debe presionar la tecla Opción luego de iniciar arrastrar los elementos).

El arrastrar y soltar automático puede ser configurado por separado para cada objeto de un formulario vía dos opciones de la Lista de propiedades: Arrastrar automático y Soltar automático.

  • Arrastrar automático (objetos de tipo texto únicamente):cuando esta opción está seleccionada, el modo arrastrar automático se activa para el objeto. Este modo es prioritario para las imágenes, incluso si la opción Arrastrable está seleccionada. En este modo, el evento de formulario On Begin Drag Over NO se genera. Si desea "forzar" la utilización del arrastrar estándar cuando el arrastrar automático esté activo, presione la tecla Alt (Windows) u Opción (OS X) durante la operación (bajo OS X, debe presionar la tecla Opción luego de iniciar arrastrar los elementos).
    Esta opción no está disponible para las imágenes.
  • Soltar automático: Esta opción se utiliza para activar el modo soltar automático. En este modo, 4D maneja automáticamente, si es posible, la inserción de datos arrastrados de tipo texto o imagen y soltados en el objeto (los datos son pegados en el objeto). Los eventos de formulario On Drag Over y On Drop no son generados en este caso.
    En el caso de soltar datos diferentes de texto o imágenes (otro objeto 4D, archivo, etc. ) o datos complejos, la aplicación se refiere al valor de la opción Soltable: si está seleccionada, se generan los eventos de formulario On Drag Over y On Drop; de lo contrario, se rechaza el soltar. Esto también depende del valor de la opción "Prohibido soltar datos que no provengan de 4D" (ver a continuación).

A partir de la versión 11, 4D permite el arrastrar y soltar de selecciones, de objetos, o de archivos externos a 4D, como por ejemplo los archivos de imágenes. Esta posibilidad debe estar soportada por el código de la base.

En las bases convertidas de una versión anterior de 4D, esta posibilidad puede llevar a malfuncionamiento si el código existente no está adaptado. Por esta razón, una opción en las Preferencias puede utilizarse para desactivar esta función: Prohibido soltar datos que no provengan de 4D.

Esta opción se encuentra en la página Aplicación/Compatibilidad. Está seleccionada por defecto en las bases convertidas.

Cuando esta opción está seleccionada, se rechaza el soltar objetos externos en formularios 4D. Note sin embargo que la inserción de objetos externos continua siendo posible en objetos que tengan la opción Soltar automático, cuando la aplicación puede interpretar los datos soltados (texto o imagen).



Ver también 

DRAG AND DROP PROPERTIES
Drop position
Evento formulario
GET PROCESS VARIABLE
Is a list
RESOLVE POINTER
Type

 
PROPIEDADES 

Producto: 4D
Tema: Arrastrar y soltar

 
HISTORIA 

 
ARTICLE USAGE

Manual de lenguaje 4D ( 4D v16)
Manual de lenguaje 4D ( 4D v16.1)
Manual de lenguaje 4D ( 4D v16.2)
Manual de lenguaje 4D ( 4D v16.3)