PROCEDURE ProcSurvol()
nColonne, nLigne sont des entiers
// Colonne et ligne survolées
nColonne = ( _DND.SourisPosX / gfnPasColonne)+1
nLigne = ( _DND.SourisPosY / gfnPasLigne)+1
// anti-dépassement
SI nColonne>gnNb_Col ALORS
nColonne=gnNb_Col
FIN
SI nLigne>gnNb_Lig ALORS
nLigne=gnNb_Lig
FIN
SI _DND.ChampCible="IMAGE1" ALORS
// si la case d´origine est vide ou si la case de destination est occupée
SI _DND.ChampSource="IMAGE1" ALORS
SI ( gfsTabPresent[gfnLigneCliquée, gfnColonneCliquée]~="" OU gfsTabPresent[nLigne, nColonne]<>"") ALORS
DnDCurseur(dndInterdit)
SINON
DnDCurseur(dndCopier)
FIN
SINON
SI ( gfsTabSolution[gfnLigneCliquée, gfnColonneCliquée]~="" OU gfsTabPresent[nLigne, nColonne]<>"") ALORS
DnDCurseur(dndInterdit)
SINON
DnDCurseur(dndCopier)
FIN
FIN
SINON
// si la case d´origine est vide ou si la case de destination est occupée
SI _DND.ChampSource="IMAGE1" ALORS
SI ( gfsTabPresent[gfnLigneCliquée, gfnColonneCliquée]~="" OU gfsTabSolution[nLigne, nColonne]<>"") ALORS
DnDCurseur(dndInterdit)
SINON
DnDCurseur(dndCopier)
FIN
SINON
SI ( gfsTabSolution[gfnLigneCliquée, gfnColonneCliquée]~="" OU gfsTabSolution[nLigne, nColonne]<>"") ALORS
DnDCurseur(dndInterdit)
SINON
DnDCurseur(dndCopier)
FIN
FIN
FIN
PROCEDURE Quadrillage(sImage)
// Dessin du quadrillage
// sImage est le champ image dans lequel dessiner
// on trace les contours de chaque portion d´image
dDébutDessin({sImage})
nLigne,nColonne sont des entiers
POUR nLigne=1 A gnNb_Lig
POUR ncolonne=1 A gnNb_Col
// lignes verticales
dLigne(gfnPasColonne*(nColonne-1), 0, gfnPasColonne*(nColonne-1), {sImage}..Hauteur, iNoir)
dLigne(gfnPasColonne*(nColonne-1)-1, 0, gfnPasColonne*(nColonne-1)-1, {sImage}..Hauteur, iNoir)
//lignes horizontales
dLigne(0, gfnPasLigne*(nLigne-1), {sImage}..Largeur, gfnPasLigne*(nLigne-1), iNoir)
dLigne(0, gfnPasLigne*(nLigne-1)-1, {sImage}..Largeur, gfnPasLigne*(nLigne-1)-1, iNoir)
FIN
FIN
// lignes de fin
dLigne({sImage}..Largeur-1, 0, {sImage}..Largeur-1, {sImage}..Hauteur, iNoir)
dLigne({sImage}..Largeur-2, 0, {sImage}..Largeur-2, {sImage}..Hauteur, iNoir)
dLigne(0, {sImage}..Hauteur-1, {sImage}..Largeur, {sImage}..Hauteur-1, iNoir)
dLigne(0, {sImage}..Hauteur-2, {sImage}..Largeur, {sImage}..Hauteur-2, iNoir)
PROCEDURE ProcLacher()
// Ligne et colonne de la portion survolée
nColonne, nLigne sont des entiers
nColonne = ( _DND.SourisPosX / gfnPasColonne)+1
nLigne = ( _DND.SourisPosY / gfnPasLigne)+1
// anti-dépassement
SI nColonne>gnNb_Col ALORS
nColonne=gnNb_Col
FIN
SI nLigne>gnNb_Lig ALORS
nLigne=gnNb_Lig
FIN
// Copie de l´image dans la case
dCopieImage({_DND.ChampSource}, {_DND.ChampCible}, copieSrcCopie,...
gfnPasColonne*(gfnColonneCliquée-1), gfnPasLigne*(gfnLigneCliquée-1), gfnPasLigne, gfnPasColonne,...
gfnPasColonne*(nColonne-1), gfnPasLigne*(nLigne-1), gfnPasLigne, gfnPasColonne)
// on efface le morceau déplacé
dCopieImage(IMG_TRANSP, {_DND.ChampSource}, copieSrcCopie,...
0, 0, gfnPasLigne, gfnPasColonne,...
gfnPasColonne*(gfnColonneCliquée-1), gfnPasLigne*(gfnLigneCliquée-1), gfnPasLigne, gfnPasColonne)
// si c´est un déplacement dans la zone solution
SI _DND.ChampSource~="IMAGE2" ALORS
gfsTabSolution[gfnLigneCliquée, gfnColonneCliquée]=""
SINON
gfsTabPresent[gfnLigneCliquée, gfnColonneCliquée]=""
FIN
// si c´est un déplacement dans la zone mélangée
// tableau solution
SI _DND.Champcible~="IMAGE2" ALORS
gfsTabSolution[nLigne, nColonne] = gfnLigneIni+","+gfnColonneIni
SINON
gfsTabPresent[nLigne, nColonne] = gfnLigneIni+","+gfnColonneIni
FIN
// on vérifie si c´est fini
VérifFin()