4D v16.3DRAG AND DROP PROPERTIES |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v16.3
DRAG AND DROP PROPERTIES
|
DRAG AND DROP PROPERTIES ( srcObjeto ; srcElemento ; srcProceso ) | ||||||||
Parámetro | Tipo | Descripción | ||||||
srcObjeto | Puntero |
![]() |
Puntero hacia el objeto fuente de arrastrar y soltar | |||||
srcElemento | Entero largo |
![]() |
Número del elemento del array arrastrado o Número de la fila de la list box arrastrada o Elemento de la lista jerárquica arrastrada o -1 si el objeto arrastrado no es ni un elemento de array ni de list box ni de lista jerárquica | |||||
srcProceso | Entero largo |
![]() |
Número de proceso fuente | |||||
El comando DRAG AND DROP PROPERTIES permite obtener información sobre el objeto fuente cuando un evento On Drag Over u On Drop ocurre para un objeto “complejo” (array, list box o lista jerárquica).
Generalmente, se utiliza DRAG AND DROP PROPERTIES desde dentro del método de objeto del objeto (o desde una de las subrutinas que llama) para el cual el evento On Drag Over u On Drop occure (el objeto de destino).
Importante: los datos pueden soltarse en un objeto de formulario si la propiedad Soltable ha sido seleccionada. Igualmente, su método de objeto debe ser activado por On Drag Over y/u On Drop, para procesar estos eventos.
Después de la llamada:
Si llama a DRAG AND DROP PROPERTIES cuando no hay ningún evento arrastrar y soltar, srcObjeto devuelve un puntero NIL, srcElemento devuelve -1 y srcProceso devuelve 0.
Consejo: 4D administra automáticamente el aspecto gráfico de arrastrar y soltar. Entonces usted debe responder al evento de manera apropiada. En los siguientes ejemplos, la respuesta es copiar los datos que han sido arrastrados. De manera alternativa, puede implementar interfaces de usuario sofisticadas donde, por ejemplo, arrastrar y soltar un elemento de array de una ventana flotante hace que la ventana de destino se llene (la ventana donde el objeto de destino está ubicado) con datos estructurados (como varios campos que provienen de un registro único identificado por el elemento de array fuente).
Se utiliza DRAG AND DROP PROPERTIES durante un evento On Drag Over para decidir si el objeto de destino acepta la operación arrastrar y soltar, dependiendo del tipo y/o la naturaleza del objeto fuente (o de cualquier otra razón). Si acepta arrastrar y soltar, el método de objeto debe devolver $0:=0. Si no acepta arrastrar y soltar, el método de objeto debe devolver $0:=-1. La aceptación o rechazo de arrastrar y soltar se refleja en la pantalla, el objeto se resalta o no como destino potencial de la operación arrastrar soltar.
En varios de los formularios de su base, hay áreas de desplazamiento donde usted quiere reordenar manualmente los elementos simplemente arrastrándolos y soltándolos al interior de cada área. En lugar de escribir código específico para cada caso, puede implementar un método de proyecto genérico que maneje todas las áreas de desplazamiento. Puede escribir un código como este:
` Método de proyecto Manejo arrastrar y soltar interno en un array
` Manejo arrastrar y soltar interno en un array ( Puntero ) -> Booleano
` Manejo arrastrar y soltar interno en un array ( -> Array ) -> Es un arrastrar y soltar interno en un array
Case of
:(Form event=On Drag Over)
DRAG AND DROP PROPERTIES($vpSrcObj;$vlSrcElem;$vlPID)
If($vpSrcObj=$1)
` Aceptar arrastrar y soltar si es interno del array
$0:=0
Else
$0:=-1
End if
:(Form event=On Drop)
` Obtener la información sobre el objeto fuente de arrastrar y soltar
DRAG AND DROP PROPERTIES($vpSrcObj;$vlSrcElem;$vlPID)
` Obtener el número del elemento de destino
$vlDstElem:=Drop position
` Si el elemento no fue soltado sobre si mismo
If($vlDstElem #$vlSrcElem)
` Guardar el elemento arrastrado en el elemento 0 del array
$1->{0}:=$1->{$vlSrcElem}
` Borrar el elemento arrastrado
DELETE FROM ARRAY($1->;$vlSrcElem)
` Si el elemento de destino estaba más allá del elemento arrastrado
If($vlDstElem>$vlSrcElem)
` Decremento del número del elemento de destino
$vlDstElem:=$vlDstElem-1
End if
` Si arrastrar y soltar ocurre más allá del último elemento
If($vlDstElem=-1)
` Definir el número del elemento de destino para un nuevo elemento al final del array $vlDstElem:=Size of array($1->)+1
End if
` Insertar este nuevo elemento
INSERT IN ARRAY($1->;$vlDstElem)
` Fijar su valor el cual fue almacenado previamente en el elemento cero del array
$1->{$vlDstElem}:=$1->{0}
` El elemento se convierte en el nuevo elemento seleccionado del array
$1->:=$vlDstElem
End if End case
Una vez haya implementado este método de proyecto, puede utilizarlo de la siguiente forma:
` Método de objeto del área de desplazamiento anArray
Case of
`...
:(Form event=On Drag Over)
$0:=Manejo arrastrar y soltar interno en un array(Self)
:(Form event=On Drop)
Manejo arrastrar y soltar interno en un array(Self)
` ...
End case
En varios de los formularios de su base, tiene áreas de texto editables en las cuales quiere arrastrar y soltar datos de varias fuentes. En lugar de escribir código específico para cada caso, puede implementar un método de proyecto genérico que maneje todas las áreas de texto editables. Puede escribir el método siguiente:
` Método de proyecto Tratamiento de soltar en variable Texto
` Tratamiento de soltar en variable Texto ( Puntero )
` Tratamiento de soltar en variable Texto ( -> variable texto o cadena )
Case of
` Uso de este evento para aceptar o rechazar el arrastrar y soltar
:(Form event=On Drag Over)
` Inicializar $0 para rechazar
$0:=-1
` Obtener la información sobre el objeto fuente de arrastrar y soltar
DRAG AND DROP PROPERTIES($vpSrcObj;$vlSrcElem;$vlPID)
` En este ejemplo, no permitimos arrastrar y soltar desde un objeto hacia sí mismo
If($vpSrcObj # $1)
` Obtener el tipo de los datos arrastrados
$vlSrcType:=Type($vpSrcObj->)
Case of
:($vlSrcType=Is text)
` OK para las variables texto
$0:=0
:($vlSrcType=Is string var)
` OK para las variables cadena
$0:=0
:(($vlSrcType=String array) | ($vlSrcType=Text array))
` Ok para los arrays cadena y texto
$0:=0
:(($vlSrcType=Is longint) | ($vlSrcType=Is real)
If(Is a list($vpSrcObj->))
` OK para las listas jerárquicas
$0:=0
End if
End case
End if
` Uso de este evento para efectuar realmente la acción de arrastrar y soltar
:(Form event=On Drop)
$vtDraggedData:=""
` Obtener la información sobre el objeto fuente de arrastrar y soltar
DRAG AND DROP PROPERTIES($vpSrcObj;$vlSrcElem;$vlPID)
` Obtener el tipo de los datos arrastrados
$vlSrcType:=Type($vpSrcObj->)
Case of
` Si es un array
:(($vlSrcType=String array) | ($vlSrcType=Text array))
If($vlPID # Current process)
` Leer el elemento desde la instancia de la variable en el proceso fuente
GET PROCESS VARIABLE($vlPID;$vpSrcObj->{$vlSrcElem};$vtDraggedData)
Else
` Copiar el elemento del array
$vtDraggedData:=$vpSrcObj->{$vlSrcElem}
End if
` Si es una lista
:(($vlSrcType=Is real) | ($vlSrcType=Is longint))
` Si es una lista de otro proceso
If($vlPID # Current process)
`Obtener la referencia de la lista en el otro proceso
GET PROCESS VARIABLE($vlPID;$vpSrcObj->;$vlList)
Else
$vlList:=$vpSrcObj->
End if
` Si la lista existe
If(Is a list($vpSrcObj->))
`Obtener el texto del elemento cuya posición se obtuvo
GET LIST ITEM($vlList;$vlSrcElem;$vlItemRef;$vsItemText)
$vtDraggedData:=$vsItemText
End if
Else
` Es una variable cadena o texto
If($vlPID # Current process)
GET PROCESS VARIABLE($vlPID;$vpSrcObj->;$vtDraggedData)
Else
$vtDraggedData:=$vpSrcObj->
End if
End case
` Si hay efectivamente a soltar (el objeto fuente puede estar vacío)
If($vtDraggedData # "")
$1->:=$1->+$vtDraggedData
End if
End case
Una vez haya implementado este método de proyecto, puede utilizarlo de este forma:
` Método de objeto del campo de texto [anyTable]aTextField
Case of
` ...
:(Form event=On Drag Over)
$0:=Handle dropping to text area(Self)
:(Form event=On Drop)
Handle dropping to text area(Self)
` ...
End case
Queremos llenar un área de texto (por ejemplo, una etiqueta) con los datos arrastrados de una list box.
Este es el método de objeto de etiqueta1:
Case of
:(Form event=On Drag Over)
DRAG AND DROP PROPERTIES($source;$arrayrow;$processnum)
If($source=Get pointer("listbox1"))
$0:=0 `Se acepta soltar
Else
$0:=-1 `Se rechaza arrastrar
End if
:(Form event=On Drop)
DRAG AND DROP PROPERTIES($source;$arrayrow;$processnum)
QUERY([Empleados1];[Empleados1]Apellido=arrApellidos{$arrayrow})
If(Records in selection([Empleados1])#0)
etiqueta1:=[Empleados1]Nombre+" "+[Empleados1]Apellido+Char(Carriage return)+[Empleados1]Direccion+Char(Carriage return)+[Empleados1]Ciudad+","+" "+[Empleados1]Departamento+" "+[Empleados1]Codigopostal
End if
End case
Luego se hace posible efectuar la siguiente acción:
Arrastrar y soltar
Drop position
Evento formulario
GET PROCESS VARIABLE
Is a list
RESOLVE POINTER
Producto: 4D
Tema: Arrastrar y soltar
Número
607
Modificado: 4D 2004.2
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)