Voici un exemple de code source permettant de transférer des informations entre deux listes, OBJ_SOURCE et OBJ_CIBLE. COL1 et COL2 sont des colonnes d'OBJ_SOURCE, COL3 appartient à OBJ_CIBLE.
La gestion de trois événements est nécessaire :
/* Variables utilisées
num_bin_4 CodeRetour
num_bin_4 ActionFaite
bool FormatDispo
num_bin_4 NbDonnees
num_bin_4 Indice
OBJ_SOURCE:GD_DebutGlissement
/* on autorise le glisser-déposer avec le bouton gauche (par exemple)
si obj_source:gd_etat_souris = _GD_BTN_GAUCHE
/* on vide les données temporaires (par précaution)
appeler_methode obj_source gd_vider_donnees CodeRetour
/* on fixe les données à transférer
lecture_lst obj_source:liste *select
appeler_methode obj_source gd_ecrire_donnees col1: 1 CodeRetour
appeler_methode obj_source gd_ecrire_donnees col2: 1 CodeRetour
fin_lecture_lst
/* on démarre le mécanisme de glisser-déposer, en autorisant une copie
/* et un déplacement des données
appeler_methode obj_source gd_executer_glissement 'MonFormat' -
_GD_ACTION_COPIE_DEPLACE ActionFaite CodeRetour
/* si l'utilisateur a choisi un déplacement, on supprime les données
/* dans l'objet source
si ActionFaite = _GD_ACTION_DEPLACEMENT
lecture_lst obj_source:liste *select
supprimer_elt obj_source:liste
fin_lecture_lst
fin
fin
OBJ_CIBLE:GD_SurvolGlissement
/* sur cet événement, on doit indiquer quelle serait l'action effectuée
/* si l'utilisateur relâchait la souris, à travers la propriété
/* gd_action_depose
/* initialisation par défaut
obj_cible:gd_action_depose = _GD_ACTION_AUCUNE
/* on teste si le format des données est géré par la cible
appeler_methode obj_cible gd_donnees_disponibles 'MonFormat' FormatDispo CodeRetour
si FormatDispo
/* on prend en compte les actions permises par la source
choix_selon obj_cible:gd_actions_permises
si_valeur _GD_ACTION_COPIE _GD_ACTION_DEPLACEMENT
/* l'utilisateur n'a pas le choix
obj_cible:gd_action_depose = obj_cible:gd_actions_permises
si_valeur _GD_ACTION_COPIE_DEPLACE
/* on prend en compte l'état des touches avec la convention classique :
/* si Ctrl appuyé, l'utilisateur veut une copie des données, sinon il veut
/* un déplacement
si obj_cible:gd_etat_clavier = _GD_TOUCHE_CTRL
obj_cible:gd_action_depose = _GD_ACTION_COPIE
sinon
obj_cible:gd_action_depose = _GD_ACTION_DEPLACEMENT
fin
fin_choix_selon
fin
OBJ_CIBLE:GD_Depose
/* Lecture et traitement des données transférées
NbDonnees = 1
Indice = 1
appeler_methode obj_cible gd_lire_donnees 'MonFormat' col3: Indice NbDonnees CodeRetour
tant_que NbDonnees > 0
inserer_elt obj_cible:liste
Indice = Indice + 1
appeler_methode obj_cible gd_lire_donnees 'MonFormat' col3: Indice NbDonnees CodeRetour
Refaire