<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />I MouseBox sono difficili. Sto cercando di implementare una soluzione drag and drop per spostare le immagini.
Di seguito ho preso il codice di esempio da Scripting Index >> Mouse Box >> SetDropTrack e lo abbiamo riorganizzato per contenere immagini nelle caselle al posto delle lettere. Tranne che non riesco a far sì che le immagini si popolino nella nuova posizione dopo il rilascio. Qualsiasi aiuto sarebbe apprezzato.
Nomi predefiniti qui ( 1 ) ;
// Datatable with: LocalPath Column che contiene i percorsi dei file di immagine sul computer
dtFull = tabella dei dati corrente () ;
path1 = dtFull : LocalPath [ 20 ] ;
path2 = dtFull : LocalPath [ 21 ] ;
percorso3 = dtFull : LocalPath [ 22 ] ;
path4 = dtFull : LocalPath [ 23 ] ;
path5 = dtFull : LocalPath [ 20 ] ;
path6 = dtFull : LocalPath [ 21 ] ;
path7 = dtFull : LocalPath [ 22 ] ;
path8 = dtFull : LocalPath [ 23 ] ;
img = Nuova immagine ( path1 ) ;
img2 = Nuova immagine ( path2 ) ;
img3 = Nuova immagine ( percorso3 ) ;
img4 = Nuova immagine ( path4 ) ;
img5 = Nuova immagine ( path1 ) ;
img6 = Nuova immagine ( path2 ) ;
img7 = Nuova immagine ( percorso3 ) ;
img8 = Nuova immagine ( path4 ) ;
// Below Modified Scripting Index >> Esempio di SetDropTrack
nextToBlank = Funzione ( { X , y } , / * funzione di supporto * /
Se ( / * child is border, grandchild is text * /
( X > 1 & è vuoto ((( puzzle [ X - 1 ] [ y ] << bambino ) << bambino ) << getImage )) | ( X < 3 & è vuoto ((( puzzle [ X + 1 ] [ y ] << bambino ) << bambino ) << getImage ))
| ( y > 1 & è vuoto ((( puzzle [ X ] [ y - 1 ] << bambino ) << bambino ) << getImage )) | ( y < 3 & è vuoto ((( puzzle [ X ] [ y + 1 ] << bambino ) << bambino ) << getImage ))
,
1 ,
0
)
) ; / * consente solo il trascinamento iniziare se accanto alla cella vuota * /
dragBegin = Funzione ( { Questo , clickPt } ,
{ X , y } = Questo << getUserData ;
Stampare ( "DragBegin" ) ;
Se ( nextToBlank ( X , y ) ,
Immagine = (( Questo << bambino ) << bambino ) << getImage / * il messaggio è il contenuto della casella di testo * /
, /* altro */
0 / * sopprime il trascinamento * /
) ;
) ; / * per rimuovere il carattere dalla cella di origine, ma solo se il rilascio ha avuto esito positivo * /
dragend = Funzione ( { Questo , clickPt , Come } , / * come è copia / sposta / ignora * /
destbox = Questo << getDestBox ;
Se ( È vuoto ( destBox ) ,
Mostrare ( "destinazione sconosciuta" ) ;
0 / * non so dove fosse il dest, forza ignorare * /
;
,
Provare (
{ X , y } = destbox << GetUserData ,
X = - 1 ;
y = - 1 ;
) ; / * il destbox potrebbe non avere una lista in userdata * /
Se (
Provare (
puzzle [ X ] [ y ] ! = destbox ,
1 / * il lancio è uguale a! = * /
)
, / * x, y potrebbe non essere indice valido * /
Mostrare ( "non lasciato cadere in questo puzzle" ) ;
0 / * non questa istanza di puzzle, forza ignorare * /
;
, /* altro */
Se ( Come == "ignorare" ,
Mostrare ( "drop not completed" ) ;
0 / * il calo non è stato completato * /
;
, /* altro */
(( Questo << bambino ) << bambino ) << setImage ( "" )
)
) ;
) ;
0 / * il codice di ritorno è ignorato * /
;
) ; / * per decidere se una goccia è consentita. i codici di ritorno (0,1) sono critici. * /
dropTrack = Funzione ( { Questo , clickPt } ,
sourcebox = Questo << getSourceBox ;
Se ( È vuoto ( sourcebox ) ,
Mostrare ( "fonte sconosciuta" ) ;
0 / * nessuna caduta dalla casella di fonte sconosciuta * /
;
, /* altro */
Provare (
{ X , y } = sourcebox << getUserData ,
X = - 1 ;
y = - 1 ;
) ; / * il sourcebox potrebbe non avere un elenco in userdata * /
Se (
Provare (
puzzle [ X ] [ y ] ! = sourcebox ,
1 / * il lancio è uguale a! = * /
)
, / * x, y potrebbe non essere indice valido * /
Mostrare ( "non da questo puzzle" ) ;
0 / * non originato da questa istanza di puzzle, ignorare * /
;
, /* altro */
Se ( ! è vuoto ((( Questo << bambino ) << bambino ) << getImage ) ,
0 / * nessuna caduta nella cella occupata * /
, /* altro */
1 / * consente di lasciare la cella vuota * /
)
) ;
) ;
) ; / * per implementare il drop * /
dropCommit = Funzione ( { Questo , clickPt , Immagine } ,
(( Questo << bambino ) << bambino ) << setImage ( Immagine ) ;
1 ; / * ignorato * /
) ; / * Cambio del cursore per le celle che possono generare un trascinamento * /
traccia = Funzione ( { Questo , clickPt } ,
{ X , y } = Questo << getUserData ;
Se ( nextToBlank ( X , y ) ,
Questo << setCursor ( "Mano" ) ,
Questo << setCursor ( "Freccia" )
) ;
1 ; / * ignorato * /
) ; / * funzione di supporto per costruire l'albero della vetrina * /
mb = Funzione ( { lettera , X , y } ,
MouseBox (
Border Box ( Sinistra ( 9 ) , Destra ( 9 ) , superiore ( 3 ) , parte inferiore ( 3 ) , lati ( 15 ) ,
Picture Box ( lettera )
) ,
<< setUserData ( Eval List ( { X , y } ) ) , / * ricorda la mia posizione. Non mi muovo, ma il mio contenuto cambia. * /
<< setDragEnable ( 1 ) ,
<< setDragBegin ( dragBegin ) , / * dragFunctions definito di seguito * /
<< setDragEnd ( dragend ) ,
<< setDropEnable ( 1 ) ,
<< setDropTrack ( dropTrack ) ,
<< setDropCommit ( dropCommit ) ,
<< setTrackEnable ( 1 ) ,
<< setTrack ( traccia )
)
) ;
puzzle = Eval List (
{ Eval List ( { mb ( img , 1 , 1 ) , mb ( img2 , 1 , 2 ) , mb ( "" , 1 , 3 )} ) ,
Eval List ( { mb ( img3 , 2 , 1 ) , mb ( img4 , 2 , 2 ) , mb ( img5 , 2 , 3 )} ) ,
Eval List ( { mb ( img6 , 3 , 1 ) , mb ( img7 , 3 , 2 ) , mb ( img8 , 3 , 3 )} )}
) ;
Nuova finestra ( "puzzle" ,
Border Box ( Sinistra ( 5 ) , Destra ( 5 ) , superiore ( 5 ) , parte inferiore ( 5 ) , lati ( 15 ) ,
Box di selezione ( N Col ( 3 ) , spaziatura ( 3 , 3 ) ,
puzzle [ 1 ] [ 1 ] ,
puzzle [ 1 ] [ 2 ] ,
puzzle [ 1 ] [ 3 ] ,
puzzle [ 2 ] [ 1 ] ,
puzzle [ 2 ] [ 2 ] ,
puzzle [ 2 ] [ 3 ] ,
puzzle [ 3 ] [ 1 ] ,
puzzle [ 3 ] [ 2 ] ,
puzzle [ 3 ] [ 3 ] ,
)
)
) ;