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 :

TreeView et PopupMenu dans XE4 [Interface]


Sujet :

C++Builder

  1. #1
    Membre confirmé
    Homme Profil pro
    Consultant technique
    Inscrit en
    Juillet 2002
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 519
    Points : 523
    Points
    523
    Par défaut TreeView et PopupMenu dans XE4
    Bonjour,

    Le context :
    J'utilise C++Builder XE4 et FireMonkey HD pour faire une application que je compile pour Win32 et Win64.

    J'ai un TTreeView qui contient des TTreeViewItem généré dynamiquement.
    Chaque TTreeViewItem à un PopupMenu.

    Si l'utilisateur ne sélectionne pas un TTreeViewItem et qu'il fait un clieck droit dessus, le PopupMenu s'ouvre.
    Vous pouvez en voir une illustration dans l'image jointe à ce post.

    Le problème c'est que dans ce cas, je n'arrive pas à déterminer quel est le TTreeViewItem responsable de l'appel.

    Quand l'utilisateur à sélectionné un TTreeViewItem, je peux me baser sur celui qui est sléectionné mais le problème c'est que je ne suis pas certain que l'utilisateur à fait surgir le popup du TTreeViewItem sélectionné.

    Et comme j'utilise Firemonkey, je ne retrouve pas les données habituelles qui me permettent de retrouver l'initiateur de ce PopupMenu.

    Pouvez-vous m'aider ?

    Merci.
    Images attachées Images attachées  

  2. #2
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    Par défaut
    Salut, voici comment je fais avec fmx pour faire apparaître un popup menu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        PopupMenu1->PopupComponent = (TButton *)Sender;
        System::Types::TPointF MousePos = Screen->MousePos();
        PopupMenu1->Popup(MousePos.X, MousePos.Y);
    J'ai mis ce code dans un évènement OnMouseDown quand Button est égal a TMouseButton::mbRight.
    • Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
    • Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
    • Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon

  3. #3
    Membre confirmé
    Homme Profil pro
    Consultant technique
    Inscrit en
    Juillet 2002
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 519
    Points : 523
    Points
    523
    Par défaut
    Merci pour cette idée.

    Il n'y a pas de moyen de connaître le composant initiateur de l'ouverture du popup ?

    Car mon problème actuel n'est pas l'ouverture du popup au bon endroit.
    Je recherche à retrouver le composant ayant ouvert le popup suite à l'action d'un utilisateur.

    Sinon c'est vrai que l'on peut ouvrir manuellement par code le popup ou sinon attribuer un popup différent à chaque objet mais ces 2 systèmes sont lourd.

    Le fait que l'on utilise FireMonkey ne devrait pas nous empêcher de remonter à la source de l'évènement. Des points de vue fonctionnel et développement, il n'est pas normal que le PopupMenu ne puisse pas savoir quel est l'objet à l'origine de son ouverture.

    J'ai essayé de remonter à utilisant les parents mais cela ne fonctionne pas non plus car j'arrive au TTreeView et non pas au TTreeViewItem alors que je n'ai associé aucun PopupMenu au TreeView.

    Quelqu'un a-t-il une autre idée ?

  4. #4
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    Par défaut
    Salut, étant donnée que tu génères tes TTreeViewItem dynamiquement tu pourrais facilement forcer la sélection d'un item, même avec le clique droit de la souris.

    LTreeViewItem étant un TTreeViewItem généré dynamiquement, tu ajoutes ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    LTreeViewItem->HitTest = true;
    LTreeViewItem->OnMouseDown = TreeViewItemMouseDown;
    Avec le code suivant pour faire la sélection:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void __fastcall TForm1::TreeViewItemMouseDown(TObject *Sender, TMouseButton Button,
              TShiftState Shift, float X, float Y)
    {
        TTreeViewItem* TreeViewItem = static_cast<TTreeViewItem*>(Sender);
        TreeView1->Selected = TreeViewItem;
    }
    Ensuite lorsqu'un TMenuItem de ton TPopupMenu est cliqué il suffit de regarder la valeur dans TreeView1->Selected.

    Quand penses-tu?
    • Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
    • Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
    • Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon

  5. #5
    Membre confirmé
    Homme Profil pro
    Consultant technique
    Inscrit en
    Juillet 2002
    Messages
    519
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 519
    Points : 523
    Points
    523
    Par défaut
    C'est très astucieux et correspond parfaitement au besoin.
    Et d'un point de vue fonctionnel, c'est logique de le sélectionner.

    J'ai acheter la version XE4 depuis peu de temps et je ne connaissais pas encore l'utilité de la propriété HitTest.

    Je t'en remercie grandement.

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

Discussions similaires

  1. Réponses: 23
    Dernier message: 16/08/2011, 23h17
  2. Popupmenu dans delphi 2009
    Par jeffray03 dans le forum EDI
    Réponses: 0
    Dernier message: 02/02/2009, 13h42
  3. Réponses: 3
    Dernier message: 13/02/2007, 16h21
  4. [D5] ajouter un popupMenu dans un component TImage
    Par pavlacki dans le forum Delphi
    Réponses: 1
    Dernier message: 25/06/2006, 02h00
  5. Ajouter un PopupMenu dans un JList
    Par Sloneczko dans le forum Composants
    Réponses: 3
    Dernier message: 04/12/2005, 17h37

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