PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Drag and Drop
Drag and Drop
Iniciado por philippe_hig, 26,nov. 2004 15:16 - 1 respuesta
Publicado el 26,noviembre 2004 - 15:16
Bonjour,

Je voudrais savoir s'il est possible d'effectuer un drag and drop d'une ligne appartenant à une table dans la fenêtre A sur une une autre table apparetenant à la fenêtre B
Merci
Publicado el 26,noviembre 2004 - 19:04
Bonjour,
Tout à fait possible en utilisant les fonctions Dndxxx ainsi que les
procédures associées à DnDEvénement
Comme je suppose que cette réponse serait insuffisante, voici le code
permettant de réaliser ce que tu veux

Cet exemple fonctionne sur une fenêtre principale ouvrant une soeur.
La table de la fenêtre source est une table mémoire alimentée par un fichier
Elle est la source du DnD pour la seconde fenêtre

La table de la fenêtre cible a la même structure que la table source
La ou les tables cibles peuvent elles-même être sources s'il y a plusieurs
tables dans la fenêtre cible et que l'on souhaite faire du DnD dans cette
fenêtre (ce qui est mon cas), il suffit de rajouter les tables et recopier
le code d'initialisation de la fenêtre cible pour les autres tables, et
ajouter les CAS correspondant.
Les tables sont multisélection
Les fonctions Dnd comportent les procédures ProcSurvol, ProcLâcher et
ProcSortiedechamp
On utilise les indirections dans le cas ou il y aurait plusieurs tables
cibles afin de réduire les lignes de code notamment

La fenêtre source doit comporter les procédures ProcLâcher et
ProcSortiedechamp
La fenêtre cible comporte la procédure ProcSurvol

Nota : Je n'ai pas mis ici les fonctions permettant de conrtrôler que les
lignes cibles existent déjà dans la table cible et les fonctions permettant
la suppression des lignes en cas de drop malencontreux, mais ce n'est pas le
plus difficile à réaliser
L'essentiel étant de comprendre le principe de fonctionnement

Bon week-end et bon développement....

// 1 - Code Initialisation de la fenêtre Source

Table_Source..DndSource=dndProgrammé
NomFenCible est une chaîne = "FenetreCible"
// ouvre la seconde fenêtre à l'endroit voulu (10,20 ici)
OuvreSoeur(NomFenCible,10 ,20)

DnDEvénement("ProcSortieChamp",Table_Source,dndSortieChamp)
{NomFenCible+"."+"Table_CIBLE"}..DndCible=dndProgrammé

DnDEvénement("ProcLâcher",{NomFenCible+"."+"Table_CIBLE"},dndLâcher)
DnDEvénement("ProcSortieChamp",Table_Source,dndSortieChamp)
DnDEvénement("ProcSortieChamp",NomFenCible+"."+"Table_CIBLE"},dndSortieChamp)

// Remplir la table source avec le contenu d'un fichier
POUR TOUT Fichier SUR cle
TableAjoute(Table_Source,Fichier.Zone1 +TAB+ Fichier.Zonex)
FIN

// Procédure utilisée par le DnD - Lâcher
PROCEDURE ProcLâcher()

DnDAccepte(dndDéfaut)
NomColonne1, Nomcolonne2 est une chaîne
reschamp est une chaîne = _DND.FenSource+"."+_DND.ChampSource

i,y est un entier
NomColonne1 = "Intitulé col 1"
Nomcolonne2 = "Intitulé col 2"

SELON reschamp
CAS _DND.FenSource+"."+"Table_Source",...
_DND.FenSource+"."+"Table_Cible" ,...
NbSelectionne est un entier = TableSelectOccurrence(reschamp)
// premier élément sélectionné
POUR i=1 A NbSelectionne
y = TableSelect(reschamp,i)
SI y > 0 ALORS
TableAjouteLigne(_DND.ChampCible, ...
{reschamp+"."+NomColonne1}[y],...
{reschamp+"."+Nomcolonne2}[y])
Fin

// Procédure utilisée par le DnD - Sortie de Champ
// On réinitialise la barre de message de la fenêtre
PROCEDURE ProcSortieChamp()
Message()

// 2 - Code d'initialisation de la fenetre cible
// La table cible peut-être source, s'il y a plusieurs tables dans cette
fenêtre
Table_Cible..DndSource=dndProgrammé
DnDEvénement("ProcSurvol",Table_Cible,dndSurvol)

// Procédure utilisée par le DnD - Survol

PROCEDURE ProcSurvol()
// Procédure appelée lorsque l'utilisateur survole le champ cible
DnDAccepte(dndDéfaut)
// on modifie le curseur
DnDCurseur(dndCopier)
// on affiche un message en fonction du champ survolé
SELON _DND.ChampCible
CAS "Table_Cible" Message("Vous allez ajouter dans la table cible :
"+ExtraitChaîne(_DND.ChampCible,1,"_",DepuisFin))
FIN


"Philippe" <philippe_hig@yahoo.fr> a écrit dans le message de news:
41a722d9@news.pcsoft.fr...

Bonjour,

Je voudrais savoir s'il est possible d'effectuer un drag and drop d'une
ligne appartenant à une table dans la fenêtre A sur une une autre table
apparetenant à la fenêtre B
Merci