IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Drag'n drop zone répétée sur elle même


Sujet :

WinDev

  1. #1
    Membre averti Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Points : 444
    Points
    444
    Par défaut Drag'n drop zone répétée sur elle même
    Bonjour tout le monde,

    J'ai un menu escamotable qui gère les favoris de mon application, le bandeau tout à droite.

    Nom : favoris.png
Affichages : 825
Taille : 188,8 Ko

    Ce menu est une zone répétée alimentée par programmation. Je souhaite que mes utilisateurs puissent ordonner leurs favoris comme il leur plait, et plutôt que d'avoir des petites flèches monter/descendre, j'aimerais faire ça en drag'n drop.

    J'ai bien lu ce sujet approchant : https://www.developpez.net/forums/d1...-zone-repetee/

    Mais dans mon cas, l'espace d'une cellule de ma zone répétée sera majoritairement occupé par un bouton.
    Sur ce bouton j'ai déjà une événement clic gauche pour déclencher l'ouverture de la fenêtre associée, et j'aimerais que ce bouton soit aussi le widget source de mon drag'n drop.
    Mais il sera aussi la cible, même si ce n'est pas la même occurence du bouton, ce sera en tout cas ce bouton mais ailleurs dans la zone répétée, vous m'avez compris.

    Je bute sur la mise en place du drag'n drop.

    Dans le code d'initialisation du bouton, j'ai ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    BTN_OPTION..DndSource = dndProgrammé
    BTN_OPTION..DndCible = dndProgrammé
     
    DnDEvénement("pSurvol", BTN_OPTION, dndSurvol)
    DnDEvénement("pLâcher", BTN_OPTION, dndLâcher)
    et 2 procédures toute bête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    PROCEDURE pSurvol()
     
    DnDCurseur( dndDéplacer )
     
    Trace("survol")
     
     
    PROCEDURE pLâcher()
     
    DnDAccepte( dndDéplacer )
     
    Trace("lâcher")
    A l'utilisation, rien ne se passe. Pas de trace. Comme si le bouton encapsulé dans la zone répétée n'acceptait pas le drag'n drop programmé.

    Si vous avez une piste, je suis preneur.

    Merci et bon dev' à tous
    'Diviser chacune des difficultés en autant de parcelles qu’il se pourrait et qu’il serait requis pour les mieux résoudre', René Descartes

    => Maya GPAO

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2003
    Messages
    943
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2003
    Messages : 943
    Points : 1 935
    Points
    1 935
    Par défaut
    Bonjour,

    Les événements ne doivent pas être sur le bouton mais la ZR elle même

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ZR_FAVORIS..DndSource = dndProgrammé
    ZR_FAVORIS..DndCible = dndProgrammé
     
    DnDEvénement("pSurvol", ZR_FAVORIS, dndSurvol)
    DnDEvénement("pLâcher", ZR_FAVORIS, dndLâcher)
    A partir de là tu devrais voir des choses s'afficher.
    Philippe,


    N'hésitez à lever le pouce si mon aide vous a été utile.

  3. #3
    Membre averti Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Points : 444
    Points
    444
    Par défaut
    Bonjour Philouz

    j'avais déjà essayé en premier sur la zone répétée, conformément au sujet déjà vu ici, mais il ne se passe rien.

    Je me demandais précisément si ce n'est pas parce que la zone répétée contient des éléments (un bouton, une image, etc...) qui empêchent d'atteindre physiquement la zone répétée qui se trouve à l'arrière plan...
    'Diviser chacune des difficultés en autant de parcelles qu’il se pourrait et qu’il serait requis pour les mieux résoudre', René Descartes

    => Maya GPAO

  4. #4
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 065
    Points : 9 411
    Points
    9 411
    Par défaut
    Peut-être qu'il faut que tu gères aussi l'événement ddebutGlisser. S'il n'y a pas de débutGlisser, il n'y a ni survol ni lacher ????
    Pas très convaincu, mais on sait jamais.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  5. #5
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2003
    Messages
    943
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2003
    Messages : 943
    Points : 1 935
    Points
    1 935
    Par défaut
    Citation Envoyé par tbc92
    Peut-être qu'il faut que tu gères aussi l'événement ddebutGlisser.
    Bien vu l'aveugle...
    Philippe,


    N'hésitez à lever le pouce si mon aide vous a été utile.

  6. #6
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 333
    Points : 3 844
    Points
    3 844
    Par défaut
    Merci pour ce petit exercice

    En initialisation de la ZR
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ZoneRépétée1..DndSource = dndProgrammé
    ZoneRépétée1..DndCible = dndProgrammé
     
    ZoneRépétéeAjoute(MoiMême, "1")
    ZoneRépétéeAjoute(MoiMême, "2")
    ZoneRépétéeAjoute(MoiMême, "3")
    sur l'event dndDebutGlisser
    iIndiceSource est globale à la fenêtre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    iIndiceSource = ZoneRépétéeInfoXY(ZoneRépétée1, ziNumLigne, SourisPosX(), SourisPosY)
    Sur l'event dndLacher
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    iIndiceCible est entier = ZoneRépétéeInfoXY(ZoneRépétée1, ziNumLigne, _DND.SourisPosX, _DND.SourisPosY)
    ZoneRépétéeDéplaceLigne(ZoneRépétée1, iIndiceSource, iIndiceCible)
    iIndiceSource = 0
    Sur l'event dndSurvol (obligatoire !)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    NumLigne est un entier = ZoneRépétéeInfoXY(ZoneRépétée1, ziNumLigne, _DND.SourisPosX, _DND.SourisPosY)	// Indice de la ligne survolée
     
    SI NumLigne > 0 ALORS
    	DnDCurseur(dndDéplacer)
    SINON
    	DnDCurseur(dndInterdit)
    FIN

  7. #7
    Membre averti Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Points : 444
    Points
    444
    Par défaut
    Bon sang, non rien n'y fait. En fait j'avais calqué l'exemple du lien donné plus haut, et ça ne fonctionne pas.

    Je vais repartir d'une zone répétée vierge et reconstruire petit à petit pour voir ce qui cloche.
    'Diviser chacune des difficultés en autant de parcelles qu’il se pourrait et qu’il serait requis pour les mieux résoudre', René Descartes

    => Maya GPAO

  8. #8
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 333
    Points : 3 844
    Points
    3 844
    Par défaut
    Mince.
    Le code que je vient de poster est celui d'une fenêtre que je viens de faire pourtant et en plus ça marche si on sélectionne un bouton, donc tout ce qu'il te faut

  9. #9
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2003
    Messages
    943
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2003
    Messages : 943
    Points : 1 935
    Points
    1 935
    Par défaut
    Moi je le fais sur un ZR en programmation pour du paramétrage et ça fonctionne sans problème.
    Philippe,


    N'hésitez à lever le pouce si mon aide vous a été utile.

  10. #10
    Membre averti Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Points : 444
    Points
    444
    Par défaut
    Ben oui Lo², ça marche bien sur une ZR tout neuve ^^

    Donc c'est moi qui ai codé un truc de travers, je reprends de zéro ma barre de favoris

    Merci
    'Diviser chacune des difficultés en autant de parcelles qu’il se pourrait et qu’il serait requis pour les mieux résoudre', René Descartes

    => Maya GPAO

  11. #11
    Membre averti Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Points : 444
    Points
    444
    Par défaut
    Ok je viens de trouver

    J'avais coché la fonction "déplacement au doigt" je ne sais absolument pas pourquoi, hé bien ça interfèrait avec le drag'n drop

    Merci à vous, ça marche maintenant.

    Par contre il faut que je vois comment je vais rendre cette action "compatible" avec ma table de favoris en BD.

    Car la permutation dans la ZR doit se traduire aussi au niveau de mes 2 enregistrements en BD, sauf que mes favoris ont comme clé primaire un entier auto incrément, que je passe en paramètre de ma ZR.

    Mais lors de cette permutation visuelle, tout y passe, y compris les clés.

    Soit il faut que j'introduise une notion d'ordre (mais il faudrait que je prépare une routine qui me renumérote les favoris déjà existants en BD) et j'inverse les ordres, soit en BD je permute tous les champs de mes 2 enregistrements sauf les clés évidemment, et je force un rechargement complet de ma ZR comme ça les clés sont permutées aussi visuellement... C'est sûrement plus élégant de ne pas recharger à chaque permutation
    'Diviser chacune des difficultés en autant de parcelles qu’il se pourrait et qu’il serait requis pour les mieux résoudre', René Descartes

    => Maya GPAO

  12. #12
    Membre averti Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Points : 444
    Points
    444
    Par défaut
    Je publierai ma solution demain, car en fait ce n'est même pas une histoire de permutation, j'ai complètement craqué moi ^^

    Quand on drag'n drop, c'est pour ordonner, donc insérer entre 2.

    L'idée c'est donc bien de faire une renumérotation en BD qui soit représentative du visuel, mais il faut tenir compte de si la cible est plus bas que le source, ou inversement.

    Bref à demain
    'Diviser chacune des difficultés en autant de parcelles qu’il se pourrait et qu’il serait requis pour les mieux résoudre', René Descartes

    => Maya GPAO

  13. #13
    Membre averti Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Points : 444
    Points
    444
    Par défaut
    Comme convenu, voici ma solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    indiceCible est entier = ZoneRépétéeInfoXY(ZR_favoris, ziNumLigne, _DND.SourisPosX, _DND.SourisPosY)
    favid est un entier
     
    SI indiceCible > indiceSource ALORS
     
    	POUR i = (indiceSource + 1) _A_ indiceCible
     
    		favid = ZR_favoris[i].ATT_favid
    		HFiltre(fav,fav_id,hValMin,hValMax,"fav_id = " + favid)
    		SI HLitPremier(fav) ALORS
    			fav.fav_ordre = (i-1)
    			HModifie(fav)
    		FIN
    		HDésactiveFiltre(fav)
     
    	FIN
     
    	favid = ZR_favoris[indiceSource].ATT_favid
    	HFiltre(fav,fav_id,hValMin,hValMax,"fav_id = " + favid)
    	SI HLitPremier(fav) ALORS
    		fav.fav_ordre = indiceCible
    		HModifie(fav)
    	FIN
    	HDésactiveFiltre(fav)
     
     
    SINON
     
    	POUR i = (indiceCible + 1) _A_ ZR_favoris..Occurrence
     
    		favid = ZR_favoris[i].ATT_favid
    		HFiltre(fav,fav_id,hValMin,hValMax,"fav_id = " + favid)
    		SI HLitPremier(fav) ALORS
    			fav.fav_ordre = (i+1)
    			HModifie(fav)
    		FIN
    		HDésactiveFiltre(fav)
     
    	FIN
     
    	favid = ZR_favoris[indiceSource].ATT_favid
    	HFiltre(fav,fav_id,hValMin,hValMax,"fav_id = " + favid)
    	SI HLitPremier(fav) ALORS
    		fav.fav_ordre = (indiceCible + 1)
    		HModifie(fav)
    	FIN
    	HDésactiveFiltre(fav)
     
     
    FIN
     
    init()  // procédure qui supprime et recharge les favoris d'après les infos en BD
     
    ZoneRépétéePosition(ZR_favoris, indiceCible)
     
    indiceSource = 0
    Entre temps, je me suis rendu compte que je me suis peut-être un peu cassé la tête à vouloir tenir compte du sens du déplacement, alors qu'on peut faire plus simple en faisant effectivement le ZoneRépétéeDéplaceLigne(ZR_favoris, iIndiceSource, iIndiceCible) puis en parcourant toute la ZR renuméroter entièrement les favoris dans la BD.
    Après ça peut faire beaucoup d'update si on a un paquet de favoris, à voir. Mais ça marche
    'Diviser chacune des difficultés en autant de parcelles qu’il se pourrait et qu’il serait requis pour les mieux résoudre', René Descartes

    => Maya GPAO

  14. #14
    Membre actif

    Homme Profil pro
    Sans
    Inscrit en
    Mars 2018
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Mars 2018
    Messages : 153
    Points : 295
    Points
    295
    Billets dans le blog
    1
    Par défaut
    Bonsoir,

    En version > 19

    Je l'aurais fait avec un champ tableau de bord qui te permet de passer en mode édition. Il gère le drag'n drop de manière native et mémorise tout seul comme un grand la position des widgets.

    Bon dev,

    Padbrain

Discussions similaires

  1. Drag n Drop zone répétée
    Par Juke- dans le forum WinDev
    Réponses: 9
    Dernier message: 29/11/2016, 08h36
  2. [SQL2K] delete cascade d'une table sur elle même
    Par StormimOn dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 25/04/2006, 16h28
  3. L'installation d'XP boucle sur elle-même
    Par pf106 dans le forum Windows XP
    Réponses: 13
    Dernier message: 20/08/2005, 14h55
  4. TABLE pointant sur elle-même, requete de selection recursive
    Par Mike@Nestor dans le forum Langage SQL
    Réponses: 1
    Dernier message: 27/07/2005, 14h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo