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

C++Builder Discussion :

[debutant] drag & drop comment ca marche ?


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Merfolk
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    170
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 170
    Par défaut [debutant] drag & drop comment ca marche ?
    Bonjour tout le monde,

    j'aurai besoin d'une petite aide sur le drag and drop. En effet, je n'ai encore jamais programmé de ma vie un truc qui fait du drag& drop (tous languages confondus), et je n'ai aucune idée de comment ca marche...

    Je ne trouve pas grand chose dans le forum qui en parle, ni dans la faq, ou alors des trucs de fou, style drag & drop interapplications etc.
    Dans l'aide je vois vaguement qu'il existe des evenements dragOver, dragStart dragStop, dragdrop etc. mais ils ne sont pas sur tous les composants et je n'y comprends pas grand chose surtout.

    Donc voilà, sachant que je n'ai pas accès à google (du boulot), est -ce que qqn peut me fournir un exemple de drag en drop complet (ou tout lien interessant)? de ce qu'il faut faire précisement.


    (mon but est de faire du drag& drop au sein d'une grille, pour déplacer des valeurs de cellules dans une autre)


    voilà, merci si qqn m'aide, à toutes.

  2. #2
    Membre Expert
    Avatar de bakaneko
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 268
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 268
    Par défaut
    Les Drag&Drop sont gérés par la cible, pas par la source.

    Donc:
    1 - mais la propriété DragMode de ton composant source à dmAutomatic
    2 - Perso, j'utilise les évènement OnDragDrop et On DragOver.

    Sur le OnDragDrop, je mets le code à faire sur mon Drag&Drop en utilisant le paramètre Source pour savoir les données envoyées (en ayant fait un cast bien entendu.
    Sur le OnDragOver, je teste sir je veux bien recevoir les données et je mets Accept à true si oui.

    Exemple trouvé dans l'aide de Builder.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void __fastcall TForm1::ListBox1DragOver(TObject *Sender, TObject *Source, int X, int Y, TDragState State, bool &Accept)
     
    {
       Accept = Source->ClassNameIs("TLabel");
     
    }
    Ce gestionnaire d'événement OnDragDrop implémente le comportement d'un objet "déplacé".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    void __fastcall TForm1::ListBox1DragDrop(TObject *Sender, TObject *Source, int X, int Y)
     
    {
      if (Sender->ClassNameIs("TListBox") && Source->ClassNameIs("TLabel"))
      {
        TListBox *DestList = (TListBox *)Sender;
        DestList->Font = ((TLabel *)Source)->Font;
        DestList->Color = ((TLabel *)Source)->Color;
      }
    }

  3. #3
    Membre confirmé Avatar de Merfolk
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    170
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 170
    Par défaut
    d'accord merci de ces précisions. Pour m'enlever un doute :

    donc si j'ai bien compris, en drag& drop, tout ce qu'on sait, du point de vue du composant c'est le composant qu'on a reçu sur la gueule c'est tout ?
    Tout ce que je sais par ex c'est : je suis une texteBox, et j'accepte de recevoir une listeBox.

    Et donc pour ce qui est "du contenu droppé", en gros il faut passer par des variables globales c'est ça ?
    (ou faire du source->selectedItem quand possible)

    (L'utilisateur ne souhaite pas drag&drop le composant, mais une certaine ligne précise)

  4. #4
    Membre Expert
    Avatar de bakaneko
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 268
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 268
    Par défaut
    Si tu regardes l'exemple que je t'ai donné, tu as:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((TLabel *)Source)->Font;
    A l'aide du parmètre Source (de type TObject* d'où l'intéret du cast), tu peux obtenir tous les propriétés et méthodes de l'objet source.

    Pour un listbox, tu pourras faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Edit1->Text = ((TListBox*)Source)->Text;
    J'espère avoir été clair...

  5. #5
    Membre confirmé Avatar de Merfolk
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    170
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 170
    Par défaut
    ok merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 09/04/2013, 22h18
  2. [Prototype] Drag'n'Drop - Comment créer une zone de tolérance (d'ancrage) ?
    Par BnA dans le forum Bibliothèques & Frameworks
    Réponses: 2
    Dernier message: 07/01/2008, 10h12
  3. [Drag & Drop] comment faire un écho fantome ?
    Par Gromitou dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 22/03/2004, 15h28

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