<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />MouseBoxes son difíciles. Estoy tratando de implementar una solución de arrastrar y soltar para mover imágenes.
A continuación, he tomado el código de ejemplo de Scripting Index >> Mouse Box >> SetDropTrack y lo he vuelto a implementar para que contenga imágenes en los cuadros en lugar de letras. Excepto que no puedo hacer que las imágenes se rellenen en la nueva ubicación después de soltarlas. Cualquier ayuda sería apreciada.
Nombres predeterminados aquí ( 1 ) ;
// Datatable with: LocalPath Column que contiene rutas a archivos de imagen en la computadora
dtFull = tabla de datos actual () ;
camino1 = dtFull : LocalPath El 20 ] ;
camino2 = dtFull : LocalPath El 21 ] ;
camino3 = dtFull : LocalPath El 22 ] ;
camino4 = dtFull : LocalPath El 23 ] ;
camino5 = dtFull : LocalPath El 20 ] ;
camino6 = dtFull : LocalPath El 21 ] ;
camino7 = dtFull : LocalPath El 22 ] ;
camino8 = dtFull : LocalPath El 23 ] ;
img = Nueva imagen ( camino1 ) ;
img2 = Nueva imagen ( camino2 ) ;
img3 = Nueva imagen ( camino3 ) ;
img4 = Nueva imagen ( camino4 ) ;
img5 = Nueva imagen ( camino1 ) ;
img6 = Nueva imagen ( camino2 ) ;
img7 = Nueva imagen ( camino3 ) ;
img8 = Nueva imagen ( camino4 ) ;
// A continuación el índice de secuencias de comandos modificado >> Ejemplo de SetDropTrack
nextToBlank = Función ( { X , y } , / * función auxiliar * /
Si ( / * niño es frontera, nieto es texto * /
( X > 1 Y esta vacio ((( rompecabezas El X - 1 ] [ y ] << niño ) << niño ) << obtener la imagen )) | ( X < 3 Y esta vacio ((( rompecabezas El X + 1 ] [ y ] << niño ) << niño ) << obtener la imagen ))
| ( y > 1 Y esta vacio ((( rompecabezas El X ] [ y - 1 ] << niño ) << niño ) << obtener la imagen )) | ( y < 3 Y esta vacio ((( rompecabezas El X ] [ y + 1 ] << niño ) << niño ) << obtener la imagen ))
,
1 ,
0
)
) ; / * solo permite que el arrastre comience si la siguiente puerta está en la celda vacía * /
DragBegin = Función ( { esta , clickPt } ,
{ X , y } = esta << getUserData ;
Impresión ( "dragbegin" ) ;
Si ( nextToBlank ( X , y ) ,
imagen = (( esta << niño ) << niño ) << obtener la imagen / * el mensaje es el contenido del cuadro de texto * /
, / * else * /
0 / * suprimir el arrastre * /
) ;
) ; / * función para eliminar el carácter de la celda de origen, pero solo si la eliminación tuvo éxito * /
arrastrar = Función ( { esta , clickPt , cómo } , / * como es copiar / mover / ignorar * /
caja de destino = esta << getDestBox ;
Si ( Esta vacio ( destBox ) ,
Show ( "destino desconocido" ) ;
0 / * no sé dónde estaba el destino, fuerza ignorar * /
;
,
Tratar (
{ X , y } = caja de destino << GetUserData ,
X = - 1 ;
y = - 1 ;
) ; / * el Destbox podría no tener una lista en userdata * /
Si (
Tratar (
rompecabezas El X ] [ y ] ! = caja de destino ,
1 / * lanzar es igual que! = * /
)
, / * x, y podría no ser un índice válido * /
Show ( "no se cayó en este rompecabezas" ) ;
0 / * no esta instancia de rompecabezas, fuerza ignorar * /
;
, / * else * /
Si ( cómo == "ignorar" ,
Show ( "gota no completada" ) ;
0 / * la caída no se completó * /
;
, / * else * /
(( esta << niño ) << niño ) << setImage ( "" )
)
) ;
) ;
0 / * el código de retorno se ignora * /
;
) ; / * función para decidir si se permite una caída. Los códigos de retorno (0,1) son críticos. * /
DropTrack = Función ( { esta , clickPt } ,
caja de fuente = esta << getSourceBox ;
Si ( Esta vacio ( caja de fuente ) ,
Show ( "Fuente desconocida" ) ;
0 / * No se deja caer desde el cuadro de origen desconocido
;
, / * else * /
Tratar (
{ X , y } = caja de fuente << getUserData ,
X = - 1 ;
y = - 1 ;
) ; / * la caja de origen puede no tener una lista en datos de usuario * /
Si (
Tratar (
rompecabezas El X ] [ y ] ! = caja de fuente ,
1 / * lanzar es igual que! = * /
)
, / * x, y podría no ser un índice válido * /
Show ( "no de este rompecabezas" ) ;
0 / * no obtenido de esta instancia de rompecabezas, ignorar * /
;
, / * else * /
Si ( ! esta vacio ((( esta << niño ) << niño ) << obtener la imagen ) ,
0 / * No hay caída en la celda ocupada * /
, / * else * /
1 / * permite soltar en la celda en blanco * /
)
) ;
) ;
) ; / * Función para implementar el drop * /
dropCommit = Función ( { esta , clickPt , imagen } ,
(( esta << niño ) << niño ) << setImage ( imagen ) ;
1 ; / * ignorado * /
) ; / * cambiador de cursor para celdas que pueden generar un arrastre * /
pista = Función ( { esta , clickPt } ,
{ X , y } = esta << getUserData ;
Si ( nextToBlank ( X , y ) ,
esta << setCursor ( "Mano" ) ,
esta << setCursor ( "Flecha" )
) ;
1 ; / * ignorado * /
) ; / * función auxiliar para construir el árbol de displaybox * /
megabyte = Función ( { carta , X , y } ,
MouseBox (
Caja de borde ( Izquierda ( 9 ) , Derecha ( 9 ) , parte superior ( 3 ) , fondo ( 3 ) , lados ( 15 ) ,
Cuadro de imagen ( carta )
) ,
<< setUserData ( Lista de evaluación ( { X , y } ) ) , / * recordar mi ubicación. No me muevo, pero mi contenido cambia. * /
<< setDragEnable ( 1 ) ,
<< setDragBegin ( DragBegin ) , / * DragFunciones definidas abajo * /
<< setDragEnd ( arrastrar ) ,
<< setDropEnable ( 1 ) ,
<< setDropTrack ( DropTrack ) ,
<< setDropCommit ( dropCommit ) ,
<< setTrackEnable ( 1 ) ,
<< settrack ( pista )
)
) ;
rompecabezas = Lista de evaluación (
{ Lista de evaluación ( { megabyte ( img , 1 , 1 ) , megabyte ( img2 , 1 , 2 ) , megabyte ( "" , 1 , 3 )} ) ,
Lista de evaluación ( { megabyte ( img3 , 2 , 1 ) , megabyte ( img4 , 2 , 2 ) , megabyte ( img5 , 2 , 3 )} ) ,
Lista de evaluación ( { megabyte ( img6 , 3 , 1 ) , megabyte ( img7 , 3 , 2 ) , megabyte ( img8 , 3 , 3 )} )}
) ;
Nueva ventana ( "rompecabezas" ,
Caja de borde ( Izquierda ( 5 ) , Derecha ( 5 ) , parte superior ( 5 ) , fondo ( 5 ) , lados ( 15 ) ,
Caja de alineación ( N Col ( 3 ) , espaciado ( 3 , 3 ) ,
rompecabezas El 1 ] [ 1 ] ,
rompecabezas El 1 ] [ 2 ] ,
rompecabezas El 1 ] [ 3 ] ,
rompecabezas El 2 ] [ 1 ] ,
rompecabezas El 2 ] [ 2 ] ,
rompecabezas El 2 ] [ 3 ] ,
rompecabezas El 3 ] [ 1 ] ,
rompecabezas El 3 ] [ 2 ] ,
rompecabezas El 3 ] [ 3 ] ,
)
)
) ;