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 :

wxToolTip et wxListCtrl


Sujet :

wxWidgets

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 116
    Points : 100
    Points
    100
    Par défaut wxToolTip et wxListCtrl
    Bonjour,
    j'aimerais que des tooltip apparaissent lorsque la souris passe sur chacun des item de la list.
    Cependant je n'arrive pas a trouver l'évènement associé au mouvement de la souris dans le wxListCtrl, j'ai essayé avec EVT_MOTION(func), ca marche pour les evènement de la souris dans la fenetre mais pas dans la wxListCtrl.
    Quelqu'un aurait-il une idée ?

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 116
    Points : 100
    Points
    100
    Par défaut
    Bon j'ai toujours pas trouvé en revanche en trichant un peu j'ai réussi à récupérer les évènements EVT_MOTION dans ma wxListCtrl :

    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
    22
    23
    24
    25
     
    class wxTipListCtrl : public wxListCtrl
    {
    public:
        wxTipListCtrl(wxWindow* parent, wxWindowID id, const wxPoint& pt,\
                        const wxSize& sz,long style,const wxValidator& validator,\
                         const wxString& name):
                        wxListCtrl(parent, id, pt, sz, style, validator, name){}
        void OnMouseMotion(wxMouseEvent& event)
        {
            wxPoint position = event.GetPosition();
            int flag = 0;
            long *ptrSubItem;
            long item = HitTest(position, flag, ptrSubItem);
            if (item != wxNOT_FOUND)
            {
               /*J AFFICHE MON TOOLTIP*/
            }
        }
        DECLARE_EVENT_TABLE()
    };
     
    BEGIN_EVENT_TABLE(wxTipListCtrl, wxListCtrl)
        EVT_MOTION(wxTipListCtrl::OnMouseMotion)
    END_EVENT_TABLE
    J'ai donc récupérer l'item qui est pointé, en revanche à présent mon problème est le suivant : comment afficher une toolTip à l'endroit ou pointe ma souris ?

    merci.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 116
    Points : 100
    Points
    100
    Par défaut
    Bon ben voila la solution finale qui marche :

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    /**/
    class wxTipListCtrl : public wxListCtrl
    {
    public:
        wxTipListCtrl(wxWindow* parent, wxWindowID id, const wxPoint& pt, \
                        const wxSize& sz,long style,const wxValidator& validator,\
                        const wxString& name):
                        wxListCtrl(parent, id, pt, sz, style, validator, name){}
        void OnMouseMotion(wxMouseEvent& event)
        {
            wxPoint position = event.GetPosition();
            int flag = 0;
            long *ptrSubItem;
            long item = HitTest(position, flag, ptrSubItem);
            if (item != wxNOT_FOUND)
            {
                wxString text = GetItemText(item);
                static wxTipWindow *tw = NULL;
                if (tw)
                {
                    tw->SetTipWindowPtr(NULL);
                    tw->Close();
                }
                tw = NULL;
                if (!text.empty())
                    tw = new wxTipWindow(this, text, 100, &tw);
            }
        }
        DECLARE_EVENT_TABLE()
    };
     
    BEGIN_EVENT_TABLE(wxTipListCtrl, wxListCtrl)
        EVT_MOTION(wxTipListCtrl::OnMouseMotion)
    END_EVENT_TABLE()
    /**/
    Bon je n'ai mis qu'un seul des constructeurs de wxListCtrl, donc rajouter les autres si besoin.
    Quant au wxTipWindow pour un meilleur rendu j'imagine qu'il faudrait ajouter un petit timer.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 116
    Points : 100
    Points
    100
    Par défaut
    Bon j'ai mis un timer tout marche a une chose pres, lorsque la tooltip apparait si il y a un evenement clavier a ce moment la, le programme crash ... je ne comprends pourquoi ? ni d'ou cela peux venir.
    Voici mon code :

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    class wxTipListCtrl : public wxListCtrl
    {
    private:
        wxTimer     tipTimer;
        wxString    text;
        wxTipWindow *tw;
    public:
        wxTipListCtrl(wxWindow* parent, wxWindowID id, const wxPoint& pt, \
                        const wxSize& sz,long style,const wxValidator& validator,\
                        const wxString& name):
                        wxListCtrl(parent, id, pt, sz, style, validator, name),\
                        tipTimer(this, IDD_TIP_TIMER){tw = NULL;}
        void OnTimer(wxTimerEvent& event)
        {
            if (!text.empty())
            {
                wxTipWindow *tw = new wxTipWindow(this, text, 100, &tw);
                tw->SetBoundingRect(wxRect(50,50,50,50));
            }
        }
        void OnMouseMotion(wxMouseEvent& event)
        {
            tipTimer.Stop();
            wxPoint position = event.GetPosition();
            int flag = 0;
            long *ptrSubItem;
            long item = HitTest(position, flag, ptrSubItem);
            if (item != wxNOT_FOUND)
            {
                tipTimer.Start(1200, wxTIMER_ONE_SHOT);
                text = GetItemText(item);
            }
        }
        DECLARE_EVENT_TABLE()
    };
     
    BEGIN_EVENT_TABLE(wxTipListCtrl, wxListCtrl)
        EVT_MOTION(wxTipListCtrl::OnMouseMotion)
        EVT_TIMER(IDD_TIP_TIMER, wxTipListCtrl::OnTimer)
    END_EVENT_TABLE()
    Merci

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    116
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 116
    Points : 100
    Points
    100
    Par défaut
    ok j'ai trouvé la réponse, j'ai surchargé la classe wxTipWindow pour récupérer l'évènement KEY_DOWN et ca marche :

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    class wxMyTipWindow : public wxTipWindow
    {
        public:
        wxMyTipWindow(wxWindow* parent, const wxString& text):
        wxTipWindow(parent, text){}
        void OnKeyDown(wxKeyEvent& event)
        {
            std::cout << "YO" << std::endl;
        }
        DECLARE_EVENT_TABLE()
    };
     
    BEGIN_EVENT_TABLE(wxMyTipWindow, wxTipWindow)
        EVT_KEY_DOWN(wxMyTipWindow::OnKeyDown)
    END_EVENT_TABLE()
     
    /**/
    class wxTipListCtrl : public wxListCtrl
    {
    private:
        wxTimer     tipTimer;
        wxString    text;
        wxTipWindow *tw;
    public:
        wxTipListCtrl(wxWindow* parent, wxWindowID id, const wxPoint& pt, \
                        const wxSize& sz,long style,const wxValidator& validator,\
    const wxString& name):
                        wxListCtrl(parent, id, pt, sz, style, validator, name),tipTimer(this, IDD_TIP_TIMER){tw = NULL;}
        void OnTimer(wxTimerEvent& event)
        {
            if (!text.empty())
            {
                tw = new wxMyTipWindow(this, text);
                tw->SetBoundingRect(wxRect(1,1,50,50));
            }
        }
        void OnMouseMotion(wxMouseEvent& event)
        {
            if (tipTimer.IsRunning() == true)
                tipTimer.Stop();
            wxPoint position = event.GetPosition();
            int flag = 0;
            long *ptrSubItem;
            long item = HitTest(position, flag, ptrSubItem);
            if (item != wxNOT_FOUND)
            {
                tipTimer.Start(1200, wxTIMER_ONE_SHOT);
                text = GetItemText(item);
            }
        }
        DECLARE_EVENT_TABLE()
    };
     
    BEGIN_EVENT_TABLE(wxTipListCtrl, wxListCtrl)
        EVT_MOTION(wxTipListCtrl::OnMouseMotion)
        EVT_TIMER(IDD_TIP_TIMER, wxTipListCtrl::OnTimer)
    END_EVENT_TABLE()
    /**/

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

Discussions similaires

  1. popupmenu et wxListCtrl
    Par Jérémy Lefevre dans le forum wxWidgets
    Réponses: 1
    Dernier message: 08/08/2007, 10h44
  2. probleme avec les wxListCtrl
    Par Jérémy Lefevre dans le forum wxWidgets
    Réponses: 1
    Dernier message: 27/07/2007, 11h52
  3. wxListCtrl sur une seule colonne
    Par Neophile dans le forum wxWidgets
    Réponses: 1
    Dernier message: 12/03/2007, 10h05
  4. Réponses: 4
    Dernier message: 11/02/2007, 12h25
  5. wxListCtrl et image
    Par funtix dans le forum wxPython
    Réponses: 3
    Dernier message: 19/09/2006, 18h03

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