Peut-être un plus simple extrait de mon programme.
TBM_xxx Sont des tables à l'écran
IMG_xxx est un champ IMAGE à l'écran
Déclaration des champs qui font partie de mon DnD
Procedure PrlDeclarationDragAndDrop()
TBM_Autobus..DndSource=dndProgrammé
TBM_Autobus..DndCible=dndProgrammé
DnDEvénement("PrlSurvolAutobus", TBM_Autobus, dndSurvol)
DnDEvénement("PrlLacherAutobus", TBM_Autobus, dndLâcher)
DnDEvénement("PrlDebutGlisserAutobus", TBM_Autobus, dndDébutGlisser)
TBM_Emplacement..DndCible =dndProgrammé
TBM_Emplacement..DndSource =dndProgrammé
DnDEvénement("PrlSurvolEmplacement", TBM_Emplacement, dndSurvol)
DnDEvénement("PrlLacherEmplacement", TBM_Emplacement, dndLâcher)
DnDEvénement("PrlDebutGlisserEmplacement", TBM_Emplacement, dndDébutGlisser)
IMG_Corbeille..DndCible=dndProgrammé
DnDEvénement("PrlSurvolCorbeille", IMG_Corbeille, dndSurvol)
DnDEvénement("PrlLacherCorbeille", IMG_Corbeille, dndLâcher)
Les procédures en Jaune corresponde à mes procédures de DnD
Quelques extraits des procédures :
Procedure PrlDebutGlisserAutobus()
LOCAL
l_iNumLigne est un entier
g_sNumeroAutobus=""
l_iNumLigne=TableInfoXY(TBM_Autobus, tiNumLigne, _DND.SourisPosX, _DND.SourisPosY)
SI l_iNumLigne<=0 ALORS
Erreur("La ligne n'a pas été correctement pointé avec votre souris.")
RETOUR
FIN
DnDCurseur(dndCopier)
g_sNumeroAutobus=TBM_Autobus.BNACCD[l_iNumLigne]
DnDDonne(CF_TEXT, TBM_Autobus.BNACCD[l_iNumLigne])
Procedure PrlSurvolCorbeille()
SELON _DND.ChampSource
CAS TBM_Autobus..Nom
DnDCurseur(dndDéplacer)
CAS TBM_Emplacement..Nom
DnDCurseur(dndDéplacer)
AUTRE CAS
DnDCurseur(dndInterdit)
FIN
Procedure PrlSurvolEmplacement()
l_iNumColonne est un entier
l_iNumLigne est un entier
l_iNumLigne = TableInfoXY(TBM_Emplacement, tiNumLigne, _DND.SourisPosX, _DND.SourisPosY)
l_iNumColonne = TableInfoXY(TBM_Emplacement, tiNumColonne, _DND.SourisPosX, _DND.SourisPosY)
SI _DND.ChampCible=TBM_Emplacement..Nom ALORS
DnDCurseur(dndDéplacer)
FIN
SI l_iNumColonne <= 0 OU l_iNumLigne <= 0 ALORS DnDCurseur(dndInterdit)
SI l_iNumColonne > 1 ET l_iNumColonne <= TableOccurrence(TBM_Emplacement, toColonne) ET l_iNumLigne >= 1 ET l_iNumLigne <= 15 ALORS
SI SansEspace(TBM_Emplacement[l_iNumLigne][l_iNumColonne]) <> "" ALORS
DnDCurseur(dndInterdit)
FIN
FIN
Procedure PrlLacherCorbeille()
LOCAL
l_sNumeroAutobusPourCorbeille est une chaîne=""
SELON _DND.ChampSource
CAS TBM_Autobus..Nom,TBM_Emplacement..Nom
SI DnDDonnéeDisponible(CF_TEXT) ALORS
DnDAccepte(dndDéplacer)
l_sNumeroAutobusPourCorbeille=DnDRécupère(CF_TEXT)
PrlEnleverVehicule(l_sNumeroAutobusPourCorbeille)
FIN
AUTRE CAS
SI DnDDonnéeDisponible(CF_TEXT) ALORS
DnDAccepte(dndInterdit)
FIN
FIN
Procedure PrlLacherEmplacement()
LOCAL
l_iIndice,l_iIndice_TBM_CentreGarageEmplacement est un entier
l_iNumLigne,l_iNumColonne est un entier
l_sNomColonne est une chaîne
l_sCentre_Transaction,l_sGarage_Transaction,l_sEmplacement_Transaction sont des chaînes
l_iPostion_Transaction est un entier
SI SansEspace(g_sNumeroAutobus)="" ALORS RETOUR
l_iNumLigne=TableInfoXY(TBM_Emplacement,tiNumLigne,_DND.SourisPosX,_DND.SourisPosY)
l_iNumColonne=TableInfoXY(TBM_Emplacement,tiNumColonne,_DND.SourisPosX,_DND.SourisPosY)
l_sNomColonne=TableInfoXY(TBM_Emplacement,tiNomColonne,_DND.SourisPosX,_DND.SourisPosY)
DnDAccepte(dndDéplacer)
SI SansEspace({TBM_Emplacement..Nom+"."+l_sNomColonne,indChamp}[l_iNumLigne])<>"" ALORS RETOUR
SI _DND.ChampSource=TBM_Autobus..Nom ALORS
SI PAS gp_objGroupwareRTL:PrmRecupDroit_Ajouter(cg_sGpwRTL_Module_PDG) ALORS
Info("Vous n'avez pas les droits (GpwRTL_Admin) pour effectuer cette action.")
RETOUR
FIN
SI SansEspace(TBM_Autobus.TRPWC2)<>"" ALORS
DnDCurseur(dndInterdit)
Info("Impossible de déplacer le véhicule : le véhicule est déjà dans un emplacement.","Centre = "+TBM_Autobus.TRJ7CD+RC+...
"Garage = "+TBM_Autobus.TRPWC2+RC+...
"Emplacement = "+TBM_Autobus.TRPXC2+RC+...
"Position = "+NumériqueVersChaîne(TBM_Autobus.TRNEN2))
DnDCurseur(dndInterdit)
RETOUR
FIN
{TBM_Emplacement..Nom+"."+l_sNomColonne,indChamp}[l_iNumLigne]=g_sNumeroAutobus
TBM_Emplacement[l_iNumLigne][l_iNumColonne]..CouleurFond=iJauneClair
TBM_Autobus.TRPXC2={TBM_Emplacement..Nom+"."+l_sNomColonne,indChamp}..Libellé
TBM_Autobus.TRNEN2=TBM_Emplacement[l_iNumLigne][1]
l_iIndice_TBM_CentreGarageEmplacement=TableCherche(TBM_CentreGarageEmplacement.COL_NomColonneCloner,l_sNomColonne,Vrai)
SI l_iIndice_TBM_CentreGarageEmplacement>0 ALORS
TBM_Autobus.TRJ7CD=TBM_CentreGarageEmplacement.CodeCentre[l_iIndice_TBM_CentreGarageEmplacement]
TBM_Autobus.TRPWC2=TBM_CentreGarageEmplacement.CodeGarage[l_iIndice_TBM_CentreGarageEmplacement]
SINON
TBM_Autobus.TRJ7CD=""
TBM_Autobus.TRPWC2=""
FIN
PrlMAJ_EVPGTRP(g_sNumeroAutobus,TBM_Autobus.TRJ7CD,TBM_Autobus.TRPWC2,TBM_Autobus.TRPXC2,l_iNumLigne)
FIN
SI _DND.ChampSource=TBM_Emplacement..Nom ALORS
SI PAS gp_objGroupwareRTL:PrmRecupDroit_Modifier(cg_sGpwRTL_Module_PDG) ALORS
Info("Vous n'avez pas les droits (GpwRTL_Admin) pour effectuer cette action.")
RETOUR
FIN
{TBM_Emplacement..Nom+"."+l_sNomColonne,indChamp}[l_iNumLigne]=g_sNumeroAutobus
TBM_Emplacement[l_iNumLigne][l_iNumColonne]..CouleurFond=iJauneClair
l_sCentre_Transaction=""
l_sGarage_Transaction=""
l_sEmplacement_Transaction={TBM_Emplacement..Nom+"."+l_sNomColonne,indChamp}..Libellé
l_iPostion_Transaction=TBM_Emplacement[l_iNumLigne][1]
l_iIndice_TBM_CentreGarageEmplacement=TableCherche(TBM_CentreGarageEmplacement.COL_NomColonneCloner,l_sNomColonne,Vrai)
SI l_iIndice_TBM_CentreGarageEmplacement>0 ALORS
l_sCentre_Transaction=TBM_CentreGarageEmplacement.CodeCentre[l_iIndice_TBM_CentreGarageEmplacement]
l_sGarage_Transaction=TBM_CentreGarageEmplacement.CodeGarage[l_iIndice_TBM_CentreGarageEmplacement]
FIN
l_iIndice=TableCherche(TBM_Autobus.BNACCD, g_sNumeroAutobus, Vrai)
SI l_iIndice>0 ALORS
TBM_Autobus.TRJ7CD[l_iIndice]=l_sCentre_Transaction
TBM_Autobus.TRPWC2[l_iIndice]=l_sGarage_Transaction
TBM_Autobus.TRPXC2[l_iIndice]=l_sEmplacement_Transaction
TBM_Autobus.TRNEN2[l_iIndice]=l_iPostion_Transaction
FIN
TBM_Emplacement[g_iNumLigne][g_iNumColonne]=""
TBM_Emplacement[g_iNumLigne][g_iNumColonne]..CouleurFond=iBlanc
PrlMAJ_EVPGTRP(g_sNumeroAutobus,l_sCentre_Transaction,l_sGarage_Transaction,l_sEmplacement_Transaction,l_iPostion_Transaction)
FIN
En espérant t'aider un peu.
C'est extrait directement de mon programme qui est en production depuis 2005 et le code date de 2005.
--
Corinne Bonhomme
Montréal, Canada