<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Les MouseBoxes sont difficiles. J'essaie d'implémenter une solution de glisser-déposer pour déplacer des images.
Ci-dessous, j'ai pris l'exemple de code de Scripting Index >> Mouse Box >> SetDropTrack et je l'ai ré-implémenté pour qu'il contienne des images dans les zones plutôt que des lettres. Sauf que je ne parviens pas à charger les images dans le nouvel emplacement après avoir chuté. Toute aide serait appréciée.
Noms par défaut jusqu'ici ( 1 ) ;
// Datatable with: LocalPath Colonne contenant les chemins d'accès aux fichiers image sur l'ordinateur
dtFull = tableau de données actuel () ;
chemin1 = dtFull : LocalPath [ 20 ] ;
chemin2 = dtFull : LocalPath [ 21 ] ;
chemin3 = dtFull : LocalPath [ 22 ] ;
chemin4 = dtFull : LocalPath [ 23 ] ;
chemin5 = dtFull : LocalPath [ 20 ] ;
chemin6 = dtFull : LocalPath [ 21 ] ;
chemin7 = dtFull : LocalPath [ 22 ] ;
chemin8 = dtFull : LocalPath [ 23 ] ;
img = Nouvelle image ( chemin1 ) ;
img2 = Nouvelle image ( chemin2 ) ;
img3 = Nouvelle image ( chemin3 ) ;
img4 = Nouvelle image ( chemin4 ) ;
img5 = Nouvelle image ( chemin1 ) ;
img6 = Nouvelle image ( chemin2 ) ;
img7 = Nouvelle image ( chemin3 ) ;
img8 = Nouvelle image ( chemin4 ) ;
// Indice de script modifié ci-dessous >> Exemple SetDropTrack
nextToBlank = Une fonction ( { X , y } , / * fonction d'assistance * /
Si ( / * enfant est frontière, petit-enfant est texte * /
( X > 1 Et est vide ((( puzzle [ X - 1 ] [ y ] << enfant ) << enfant ) << getimage )) | ( X < 3 Et est vide ((( puzzle [ X + 1 ] [ y ] << enfant ) << enfant ) << getimage ))
| ( y > 1 Et est vide ((( puzzle [ X ] [ y - 1 ] << enfant ) << enfant ) << getimage )) | ( y < 3 Et est vide ((( puzzle [ X ] [ y + 1 ] << enfant ) << enfant ) << getimage ))
,
1 ,
0
)
) ; / * n'autorise le glissement que si le voisin vide la cellule * /
dragBegin = Une fonction ( { ce , clickPt } ,
{ X , y } = ce << getUserData ;
Impression ( "dragBegin" ) ;
Si ( nextToBlank ( X , y ) ,
image = (( ce << enfant ) << enfant ) << getImage / * le message est le contenu de la zone de texte * /
, /* autre */
0 / * supprime le glissement * /
) ;
) ; / * fonction pour supprimer le caractère de la cellule source, mais uniquement si la suppression a réussi * /
dragnd = Une fonction ( { ce , clickPt , Comment } , / * comment copier / déplacer / ignorer * /
destbox = ce << getDestBox ;
Si ( Est vide ( destBox ) ,
Spectacle ( "destination inconnue" ) ;
0 / * Je ne sais pas où était la destination, force ignorer * /
;
,
Essayer (
{ X , y } = destbox << GetUserData ,
X = - 1 ;
y = - 1 ;
) ; / * la destbox peut ne pas avoir de liste dans userdata * /
Si (
Essayer (
puzzle [ X ] [ y ] ! = destbox ,
1 / * Le jet est identique à! = * /
)
, / * x, y n'est peut-être pas un index valide * /
Spectacle ( "pas laissé tomber dans ce puzzle" ) ;
0 / * pas cette instance de puzzle, force ignore * /
;
, /* autre */
Si ( Comment == "ignorer" ,
Spectacle ( "drop not complete" ) ;
0 / * la chute n'a pas été complétée * /
;
, /* autre */
(( ce << enfant ) << enfant ) << setImage ( "" )
)
) ;
) ;
0 / * le code retour est ignoré * /
;
) ; / * fonction pour décider si une chute est autorisée. les codes de retour (0,1) sont critiques. * /
dropTrack = Une fonction ( { ce , clickPt } ,
sourcebox = ce << getSourceBox ;
Si ( Est vide ( sourcebox ) ,
Spectacle ( "source inconnue" ) ;
0 / * pas d'abandon de la source inconnue * /
;
, /* autre */
Essayer (
{ X , y } = sourcebox << getUserData ,
X = - 1 ;
y = - 1 ;
) ; / * la sourcebox pourrait ne pas avoir de liste dans userdata * /
Si (
Essayer (
puzzle [ X ] [ y ] ! = sourcebox ,
1 / * Le jet est identique à! = * /
)
, / * x, y n'est peut-être pas un index valide * /
Spectacle ( "pas de ce puzzle" ) ;
0 / * ne provient pas de cette instance de puzzle, ignorez * /
;
, /* autre */
Si ( ! est vide ((( ce << enfant ) << enfant ) << getImage ) ,
0 / * pas de baisse sur la cellule occupée * /
, /* autre */
1 / * autoriser la suppression de la cellule vide * /
)
) ;
) ;
) ; / * fonction pour implémenter le drop * /
dropCommit = Une fonction ( { ce , clickPt , image } ,
(( ce << enfant ) << enfant ) << setImage ( image ) ;
1 ; / * ignoré * /
) ; / * Changeur de curseur pour les cellules pouvant générer un glisser * /
Piste = Une fonction ( { ce , clickPt } ,
{ X , y } = ce << getUserData ;
Si ( nextToBlank ( X , y ) ,
ce << setCursor ( "Main" ) ,
ce << setCursor ( "Flèche" )
) ;
1 ; / * ignoré * /
) ; / * Fonction d'assistance pour construire l'arborescence de la zone d'affichage * /
mb = Une fonction ( { lettre , X , y } ,
MouseBox (
Boîte frontière ( La gauche ( 9 ) , Droite ( 9 ) , Haut ( 3 ) , bas ( 3 ) , côtés ( 15 ) ,
Boîte d'image ( lettre )
) ,
<< setUserData ( Liste d'évaluation ( { X , y } ) ) , / * me souviens de ma position. Je ne bouge pas, mais mon contenu change. * /
<< setDragEnable ( 1 ) ,
<< setDragBegin ( dragBegin ) , / * dragFunctions défini ci-dessous * /
<< setDragEnd ( dragnd ) ,
<< setDropEnable ( 1 ) ,
<< setDropTrack ( dropTrack ) ,
<< setDropCommit ( dropCommit ) ,
<< setTrackEnable ( 1 ) ,
<< setTrack ( Piste )
)
) ;
puzzle = Liste d'évaluation (
{ Liste d'évaluation ( { mb ( img , 1 , 1 ) , mb ( img2 , 1 , 2 ) , mb ( "" , 1 , 3 )} ) ,
Liste d'évaluation ( { mb ( img3 , 2 , 1 ) , mb ( img4 , 2 , 2 ) , mb ( img5 , 2 , 3 )} ) ,
Liste d'évaluation ( { mb ( img6 , 3 , 1 ) , mb ( img7 , 3 , 2 ) , mb ( img8 , 3 , 3 )} )}
) ;
Nouvelle fenetre ( "puzzle" ,
Boîte frontière ( La gauche ( 5 ) , Droite ( 5 ) , Haut ( 5 ) , bas ( 5 ) , côtés ( 15 ) ,
Boîte de lineup ( N Col ( 3 ) , espacement ( 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 ] ,
)
)
) ;