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 :

TTreeView, DragOver le "vide" => access violation


Sujet :

C++Builder

  1. #1
    Membre Expert
    Avatar de netah25
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    3 233
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 233
    Par défaut TTreeView, DragOver le "vide" => access violation
    Bonjour,

    Dans un TTreeView, j'affiche l'arborescence d'élément créé par mon soft

    je peux déplacer les elements par drag / drop

    seulement si durant un drag je passe au-desus du "vide" en dessous de la fin de l'arborescence, ca plante, pourtant mon evenement dragOver contient le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void __fastcall TfrmTests::tvTestsDragOver(TObject *Sender, TObject *Source,
          int X, int Y, TDragState State, bool &Accept)
    {
    	THitTests HitTests;
    	TTreeNode *Node;
     
    	if (tvTests->Selected == NULL)
    	{
    		Accept = false;
    		return;
    	}
           // suite du code ...
    vous auriez une idée pour tester qu'il n'y a rien sous le drag et éviter la splendide mais non souhaité Acces violation ?

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 407
    Par défaut
    Salut !

    J'ai fait un essai qui ne pose pas de problème, celà dit mon code est sans doute trop simple.
    La propriété DragMode du Treeview est sur dmAutomatic

    Pour ne pas utiliser le TreeView->Selected qui viendrait mettre de la pagaille dans ce que je cherche à faire :

    Je sélectionne un noeud lors du OnMouseDown.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void __fastcall TForm1::TreeView1MouseDown(TObject *Sender,
          TMouseButton Button, TShiftState Shift, int X, int Y)
    {
    TargetNode = TreeView1->GetNodeAt(X,Y);
    }
    La méthode du DragOver

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void __fastcall TForm1::TreeView1DragOver(TObject *Sender, TObject *Source,
          int X, int Y, TDragState State, bool &Accept)
    {
    Accept = (TargetNode != NULL);
    if(Accept)
        {
        //Ton code sans doute
        //...???
        }
    }
    Le Drop se limite dans ce test à déplacer le noeud sélectionné en fin de liste.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void __fastcall TForm1::TreeView1DragDrop(TObject *Sender, TObject *Source,
          int X, int Y)
    {
    TTreeNode *Last = TreeView1->Items->Item[TreeView1->Items->Count-1];
    TreeView1->Items->Add(Last, TargetNode->Text);
    TreeView1->Items->Delete(TargetNode);
    TargetNode = NULL;
    }
    Si ça peut être un début de solution...

    A plus !

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 59
    Par défaut
    Citation Envoyé par netah25
    Bonjour,

    Dans un TTreeView, j'affiche l'arborescence d'élément créé par mon soft

    je peux déplacer les elements par drag / drop

    seulement si durant un drag je passe au-desus du "vide" en dessous de la fin de l'arborescence, ca plante, pourtant mon evenement dragOver contient le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void __fastcall TfrmTests::tvTestsDragOver(TObject *Sender, TObject *Source,
          int X, int Y, TDragState State, bool &Accept)
    {
    	THitTests HitTests;
    	TTreeNode *Node;
     
    	if (tvTests->Selected == NULL)
    	{
    		Accept = false;
    		return;
    	}
           // suite du code ...
    vous auriez une idée pour tester qu'il n'y a rien sous le drag et éviter la splendide mais non souhaité Acces violation ?
    je crois que ton problème vient d'ailleurs
    ta souris cherche ce qu'elle ne trouve pas
    tu as peut être declaré autre chose que le drag avec ta souris
    du genre mousemove par exemple
    en esperant t'aider

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