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

VB 6 et antérieur Discussion :

Drag & Drop fastidieux


Sujet :

VB 6 et antérieur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 14
    Par défaut Drag & Drop fastidieux
    Bonsoir à tous,

    J'utilise VB6.
    Mon problème est le suivant : j'ai une form remplie de contrôles. Je voudrais pouvoir glisser un fichier qui sera traité par l'application. Ainsi lorsque le fichier sera déposé N'IMPORTE OU sur la feuille, le traitement commencera.

    Le problème, c'est que l'événement _OLEDragAndDrop de VB associé à la form ne marche que si la zone où le fichier est déposée est dégagée, c'est à dire si il n'y a pas de contrôle à cet endroit. Si il y a un contrôle, c'est l'évenement _OLEDragAndDrop du contrôle qui réagit.

    La seule solution que j'ai trouvée est de rediriger les paramètres de l'événement vers une fonction générique dans chaque événement OLEDragAndDrop de chaque contrôle (TextBox, Label...) . La solution est un peu bestiale car j'ai beaucoup de crontrole dans ma feuille. Je trouve ça un peu crade. Avez vous une solution à me proposer ?

    Merci d'avance et bon week-end,
    Jeff.

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 173
    Par défaut
    Hum ...

    Je n'ai jamais utilisé le drag and drop mais tel que tu le décris, j'ai peut-être une solution.

    Mais déjà une question est-ce que lorsque tu débutes un drag (donc lorsque le clic est enfoncé) tu as un évènement qui est remonté en VB ? Je pense que non mais on ne sait jamais.

    Deuxième question, est-ce lorsque le bouton gauche est enfoncé et que le curseur souris est au dessus de la form il y a un évènement de remonté ?

    A partir de là on pourra éventuellement bidouiller

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 14
    Par défaut
    Coucou,

    Merci à toi vld44 de te pencher sur mon problème.

    Je n'ai peut-être pas donné assez de précision... En fait ce que je drag and drop, c'est un fichier qui part par exemple d'un explorer. La source vient donc d'un programme extérieur. Je pense que je n'aurais pas d'événement dans mon programme... enfin en tout cas je sais pas comment le récupérer.

    Ce que j'aimerais, c'est un même événement global qui arrive quand je dépose un fichier qui vient de l'extérieur sur ma form ou sur un des contrôle qui est dessus.

    Pour ce qui est de ta deuxième question, il faut que je regarde, mais j'ai peur que ça fasse comme pour le drag and drop, c'est à dire que ce sera chaque contrôle qui récupérera l'évenement au lieu de la forme qui est en dessous.

    A plus,
    Jeff.

  4. #4
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Bonjour,

    Tu est bien en VB6 ? parce que je ne trouve pas d'évènement _OLEDragAndDrop

    Mais j'ai un peu examiné la question et j'ai trouvé une solution qui pourra peu être t'aidé.
    J'ai mis .. Une forme -Form1- et un label -label1 que j'ai colé sur le bord de la forme pour être obligé de passer au dessus du label.
    la propiété OLEDropMode sur Manuel , idem pour le label
    J'ai mis des Stop dans tout les évenements drop de la forme et du label
    Le Drop extérieur arrive toujours dans l'évenement Form_OLEDragOver

    et pas dans le label !
    A+

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 14
    Par défaut
    Coucou,

    Merci de ta réponse.
    Je n'ai pas accés à mon projet vb pour l'instant. Je ne pourrait regarder ça que lundi matin.
    Sinon, oui je travaille avec VB6. En fait l'événement en question, c'est _OLEDragDrop et non _OLEDragAndDrop.

    Bon week-end,
    Jeff.

  6. #6
    Membre Expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Par défaut
    Je crains que tu n'ai gère le choix, chaque composant recevant le drop doit appeler une routine commune
    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
     
    Private Sub Form_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)
      Drop Data, Effect, Button, Shift
    End Sub
    Private Sub Label1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)
      Drop Data, Effect, Button, Shift
    End Sub
    Private Sub Text1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)
      Drop Data, Effect, Button, Shift
    End Sub
    Private Sub Command1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)
      Drop Data, Effect, Button, Shift
    End Sub
    Private Sub Text2_OLEDragDrop(Index As Integer, Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)
      Drop Data, Effect, Button, Shift
    End Sub
     
    Private Sub Drop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer)
      'routine générique de traitement du drop
      MsgBox "Drop Form"
    End Sub
    Pour limiter, tu devrais t'interresser au groupe de composants., dans mon exemple au dessus, j'ai trois Text2 , chacun d'eux ayant un indice de 0 à trois, et j'e n'ai qu'une seule ligne de code pour gérér le drop des trois.

  7. #7
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Bonsoir,
    Suite à la proposition de DelBeke qui ne correspond pas avec ce que j'avais constaté j'ai réexaminé la question (j'avais encore le prog de test)
    Seulement deux cas où l'événement n'arrive pas dans la forme

    1°) si une appli chevauche la forme et que le drop arrive par là sur un contrôle dont la propriété est mise à manuel.
    Solution ?
    a) mettre tout les contrôles avec la propriété OleDragMode sur None.
    b) Obligé la forme à être en dessus du bureau (API)

    2°) Si feuille sans cadre et contrôles sur le bord, là je vois pas de vrai solution sauf a)

    Ah oui, encore autre chose, les événements arrives en 1er dans _OleDragOver
    avec les mêmes éléments.
    A+

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 14
    Par défaut
    Coucou,

    Merci pour vos réponses et votre aide. Je n'ai pas eut le temps de me pencher sur le problème depuis vendredi... désolé.
    Mon appli est une forme simple contenant plusieurs frames.

    LeForestier, je n'ai pas le même resultat que toi :
    Lorsque je dépose mon fichier sur une frame ou meme un contrôle à l'intérieur, deux cas se présentent :
    1) les contrôle qui sont "sous le drop" ont la propriété OleDragMode égale à None alors j'ai un petit sens interdit à la place de mon curseur et mon Drop ne marche pas. Cela même si la forme a la propriété OleDragMode égale à Manual.
    2) les contrôle qui sont "sous le drop" ont la propriété OleDragMode égale à Manual alors c'est le contrôle qui reçoit le drop qui obtient l'événement.

    J'ai peur de ne pas bien utiliser la fonction DragAndDrop.

    A++,
    Jeff.

Discussions similaires

  1. Drag and drop "de l'extérieur"
    Par Invité dans le forum C++Builder
    Réponses: 12
    Dernier message: 31/03/2020, 10h10
  2. [JSP][DRAG AND DROP]
    Par hamed dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 23/01/2004, 17h36
  3. drag and drop
    Par jujuesteban dans le forum Composants VCL
    Réponses: 5
    Dernier message: 20/06/2003, 09h23

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