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

wxWidgets Discussion :

Clic droit sur un wxTextCtrl


Sujet :

wxWidgets

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 268
    Points : 393
    Points
    393
    Par défaut Clic droit sur un wxTextCtrl
    Bonjour,

    Lorsqu'on fait un clic droit sur un wxTextCtrl, un menu contextuel apparaît avec des options comme undo / redo / copy / paste / .... C'est un menu automatiquement créé par wxWidgets.

    1) Est-t-il possible d'ajouter des entrées à ce menu ? Si oui , de quelle manière ?

    2) Sinon, est-il possible d'avoir son propre menu contextuel sur un wxTextCtrl ? (l'évènement "right click" semble ne pas exister pour ce widget...)

    3) Peut-on définir un nouvel évènement "right click" sur un wxTextCtrl ?


    Merci. A+.

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par atm0sfe4r Voir le message
    Bonjour,
    Salut,

    Citation Envoyé par atm0sfe4r Voir le message
    1) Est-t-il possible d'ajouter des entrées à ce menu ? Si oui , de quelle manière ?
    Je ne sais pas

    Citation Envoyé par atm0sfe4r Voir le message
    2) Sinon, est-il possible d'avoir son propre menu contextuel sur un wxTextCtrl ? (l'évènement "right click" semble ne pas exister pour ce widget...)
    Oui tu peux trapper l'évènement wxEVT_CONTEXT_MENU dans la fenêtre propriétaire du contrôle et créé le menu adéquat.
    Citation Envoyé par atm0sfe4r Voir le message
    3) Peut-on définir un nouvel évènement "right click" sur un wxTextCtrl ?
    Plus besoin

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 268
    Points : 393
    Points
    393
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    Oui tu peux trapper l'évènement wxEVT_CONTEXT_MENU dans la fenêtre propriétaire du contrôle et créé le menu adéquat.
    En effet je pense que c'est la solution la plus simple, mais bon on perd les commandes pratiques fournies par le menu contextuel de base du wxTextCtrl (cf. 1er post).

    Je ne passe pas le thread en "résolu" car à mon avis il doit y avoir moyen de modifier ce satané menu ! Je vais chercher un petit peu encore

    Merci en tout cas. A+.



    Après avoir testé la solution du EVT_CONTEXT_MENU sur le panel qui contient mon wxtextCtrl, mon menu n'apparait pas et c'est toutjours celui de base qui apparaît...

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 268
    Points : 393
    Points
    393
    Par défaut
    Bon, je vois que personne n'as trouvé de solution. C'est quand même assez bizarre de ne pas pouvoir définir un nouveau menu contextuel pour ce contrôle.

    Pour moi il y a 2 solutions :

    1) Insérer mes "menu items" dans ce menu contextuel par défaut.

    2) Désactiver ce menu contextuel par défaut, à ce moment pas de problème pour activer le mien.

    Si vous avez des suggestions n'hésitez pas

    A+.

  5. #5
    Membre averti Avatar de wxXav
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Décembre 2008
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur amateur

    Informations forums :
    Inscription : Décembre 2008
    Messages : 214
    Points : 354
    Points
    354
    Par défaut
    Salut.

    Je n'ai pas testé, mais à mon avis, l'événement wxEVT_CONTEXT_MENU doit être intercepté pour le wxTextCtrl.
    Tu as donc deux possibilités :
    • Tu crées une classe dérivée de wxTextCtrl, dans laquelle tu intercept l'événement en question.
    • Tu passe par une connexion dynamique de l'événement en le redirigeant du wxtextCtrl vers le wxPanel conteneur.


    Pour la première méthode, une table classique d'événements devrait faire l'affaire.
    Pour la deuxième, voici ce que ça pourrait donner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MyTxtCtrl=new wxTextCtrl(this, -1, _T(""), ....);
    MyTxtXCtrl->Connect(wxEVT_CONTEXT_MENU, wxCommandeventHandler(MyPanel::OnContextMenu), NULL, this);
    Le code ci-dessus est à placer dans le panel devant recevoir l'événement.
    La méthode cible (OnContextMenu) est une méthode prenant en paramètre un wxCommandEvent&.

    Bonne chance

    @+
    Xav'

  6. #6
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par wxXav Voir le message
    Salut.

    Je n'ai pas testé, mais à mon avis, l'événement wxEVT_CONTEXT_MENU doit être intercepté pour le wxTextCtrl.
    Salut,
    Oui, on peut. C'est d'ailleurs une des premières solutions que je lui aie proposée. Cependant, tu ne peux avoir accès au menu par défaut. Lui, il veut rajouter des items au menu par défaut. Je me demande si ce menu n'est pas créé par la wnd class 'EditCtrl' de window?

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 268
    Points : 393
    Points
    393
    Par défaut
    Alors, j'ai testé avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myTextCtrl->Connect(wxEVT_CONTEXT_MENU,  wxContextMenuEventHandler(myPanel::OnContextMenu));
    En effet j'intercepte bien l'évènement, et cela affiche mon menu, seulement quand mon menu disparait, celui de base s'affiche systématiquement.. donc c'est pas terrible.. mais en attendant ca fera l'affaire.



    Citation Envoyé par 3DArchi Voir le message
    Salut,
    Oui, on peut. C'est d'ailleurs une des premières solutions que je lui aie proposée. Cependant, tu ne peux avoir accès au menu par défaut. Lui, il veut rajouter des items au menu par défaut. Je me demande si ce menu n'est pas créé par la wnd class 'EditCtrl' de window?
    C'est exactement ce que je veux en effet. Qu'est ce que ce "EditCtrl" ?

  8. #8
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par atm0sfe4r Voir le message
    Qu'est ce que ce "EditCtrl" ?
    Dans windows, les fenêtres ont une 'classe' (le mot est un peu malheureux dans un contexte C++). Ca définit pour ce type de fenêtre tout un tas de paramètre par défaut. "EditCtrl" (ce n'est peut être pas exactement ça) correspond à la classe window du contrôle Edit. Je soupçonne que le menu contextuel soit traité à ce niveau et donc que tu n'y ait pas accès depuis wxWidget

  9. #9
    Membre averti Avatar de wxXav
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Décembre 2008
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur amateur

    Informations forums :
    Inscription : Décembre 2008
    Messages : 214
    Points : 354
    Points
    354
    Par défaut
    Salut

    Citation Envoyé par atm0sfe4r Voir le message
    En effet j'intercepte bien l'évènement, et cela affiche mon menu, seulement quand mon menu disparait, celui de base s'affiche systématiquement.. donc c'est pas terrible.. mais en attendant ca fera l'affaire.
    Bizarre : je viens de faire un test, et en interceptant l'événement wxEVT_CONTEXT_MENU, si je ne mets pas event.Skip(), seul mon menu s'affiche, pas celui du wxTextCtrl.
    Par contre, avec event.Skip(), j'ai effectivement les deux qui s'affichent l'un après l'autre.
    C'est donc étonnant que de ton coté, tu aies les deux qui s'affichent.

    @+
    Xav'

  10. #10
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par wxXav Voir le message
    Salut



    Bizarre : je viens de faire un test, et en interceptant l'événement wxEVT_CONTEXT_MENU, si je ne mets pas event.Skip(), seul mon menu s'affiche, pas celui du wxTextCtrl.
    Par contre, avec event.Skip(), j'ai effectivement les deux qui s'affichent l'un après l'autre.
    C'est donc étonnant que de ton coté, tu aies les deux qui s'affichent.

    @+
    Xav'
    Je confirme. Quand j'avais fait le test, je n'avais pas ce genre de problème sous réserve comme le dit wxXav de ne pas faire de Skip sur l'évènement.

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 268
    Points : 393
    Points
    393
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    Dans windows, les fenêtres ont une 'classe' (le mot est un peu malheureux dans un contexte C++). Ca définit pour ce type de fenêtre tout un tas de paramètre par défaut. "EditCtrl" (ce n'est peut être pas exactement ça) correspond à la classe window du contrôle Edit. Je soupçonne que le menu contextuel soit traité à ce niveau et donc que tu n'y ait pas accès depuis wxWidget
    C'est tout à fait possible. Je vais me renseigner sur le sujet.

    En ce qui concerne le event.Skip(), je sais pas pourquoi mais oui je l'avais mis dans ma fonction...

    Alala je sens que je vais bientôt regretter Qt..

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 268
    Points : 393
    Points
    393
    Par défaut
    Bonjour,

    Alors, pour ce qui seraient intéressés, je viens de trouver la réponse : OUI on peut modifier le menu de base.

    En fait, ce n'est pas exactement cela. Il faut avoir son propre menu contextuel , donc le créer. Ensuite on y ajoute ses propres wxMenuItem. Pour ajouter les commandes prédéfinies du menu de base , on fait comme l'exemple ci-dessous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    // mon menu
    wxMenu* menu = new wxMenu();
     
    // ajout de MES items
    menu->Append(myItem1);
    menu->Append(myItem2);
     
    // ajout d'items prédéfinis
    menu->Append(wxID_COPY);
    menu->Append(wxID_SELECTALL);
    ....
    Et ca marche! Si vous voulez plus de précisions, n'hésitez pas!
    Je passe en résolu.



    Edit : Tous les identifiants (e.g. wxID_COPY) du menu contextuel de base sont bien sur disponibles. Ceux-ci sont listés ici : http://docs.wxwidgets.org/stable/wx_...html#windowids

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

Discussions similaires

  1. Clic droit sur un wxButton ?
    Par Eldered dans le forum wxWidgets
    Réponses: 3
    Dernier message: 13/07/2006, 14h22
  2. clic droit sur image
    Par iamhere dans le forum C++Builder
    Réponses: 1
    Dernier message: 15/06/2006, 15h15
  3. [MFC] clic droit sur une listbox ?
    Par julien.nasser dans le forum MFC
    Réponses: 1
    Dernier message: 07/06/2006, 14h53
  4. Clic droit sur un TTabControl
    Par FredericB dans le forum C++Builder
    Réponses: 5
    Dernier message: 04/04/2006, 19h53
  5. [C#] Clic droit sur un TreeView
    Par whilecoyote dans le forum Windows Forms
    Réponses: 5
    Dernier message: 17/03/2005, 15h03

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