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 :

Pop-up en drag d'un listBox


Sujet :

C++Builder

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  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 Pop-up en drag d'un listBox
    Bonjour bonjour !!

    Je cherche a afficher un pop-up quand je passe au dessus d'un des elements de ma listBox ...


  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
    Je sais que les TPopupMenu ont une m�thode Popup prenant comme param�tre un X et Y de positionnement donc aucun probl�me pour faire afficher le menu mais si tu veux en plus que le menu change selon la ligne de la ListBox se trouvant sous le pointeur

  3. #3
    Membre Expert

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 412
    Par d�faut
    Salut !

    Je n'ai pas compris tous les points de la question, mais � priori :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    switch(ListBox1->ItemAtPos(Point(X,Y), true))
        {
        case 0 :
        PopupMenu1->Popup(Left + ListBox1->Left + X,
                          Top + ListBox1->Top + Y);
        break;
        }
    Voir l'aide pour TListBox::ItemAtPos, en particulier pour le flag Existing.

    Je n'ai pas compris en particulier si tu exploites ceci dans la OnMouseDown ou la
    OnMouseMove... Le comportement est diff�rent mais �a fonctionne dans les deux cas.

    A plus !

  4. #4
    Membre Expert

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 412
    Par d�faut
    Salut !

    Dans la OnMouseMove, le comportement est quand m�me assez p�nible :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    void __fastcall TForm1::ListBox1MouseMove(TObject *Sender,
          TShiftState Shift, int X, int Y)
    {
    TPoint P = Point(X,Y);
    P = ListBox1->ClientToScreen(P);
    switch(ListBox1->ItemAtPos(Point(X,Y), true))
        {
        case 0 : PopupMenu1->Popup(P.x, P.y); break;
        case 1 : PopupMenu2->Popup(P.x, P.y); break;
        case 2 : PopupMenu3->Popup(P.x, P.y); break;
        }
    }
    PS : Sur le coup..., j'avais compl�tement oubli� ClientToScreen dans ma r�ponse pr�c�dente !!!

    A plus !

  5. #5
    Membre Expert

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

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 412
    Par d�faut
    Salut !

    Il y a une autre possiblit� en entrant un popupmenu dans les Objects du TStrings
    (Items du TListBox)... au cas o� ta question irait dans le sens d'une construction
    dynamique, contexte pour lequel le switch n'est d'aucun secours !

    Dans ce cas :

    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
    void __fastcall TForm1::ListBox1MouseMove(TObject *Sender,
          TShiftState Shift, int X, int Y)
    {
    TPoint P = Point(X,Y);
    P = ListBox1->ClientToScreen(P);
    int item = ListBox1->ItemAtPos(Point(X,Y), true);
    if(item != -1) // Pas de ligne égal -1 si Existing est true dans la ItemAtPos
        {
        TObject *PM = ListBox1->Items->Objects[item];
        if(PM != NULL)
            {
            if(PM->ClassNameIs("TPopupMenu"))
                {
                ((TPopupMenu*)PM)->Popup(P.x, P.y);
                }
            }
        }
    }
    L'affectation du popupmenu � Objects se fait simplement :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    ListBox1->Items->Objects[0] = PopupMenu1;
    Ou bien monter les items de la listbox avec AddObject (TStrings)...

    A plus !

  6. #6
    Membre �m�rite
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Septembre 2005
    Messages
    401
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 52
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 401
    Par d�faut
    Hello !

    Si ce que tu veux c'est juste un Hint qui va suivre la souris, changer en fonction de l'item sous la souris, et disparaitre quand tu vas sortir du Listbox , tu peux faire:
    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
    __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
      {
      fen_hint = new THintWindow(this);
      (void*)windowproc_orig = (void*)SetWindowLong(ListBox1->Handle, GWL_WNDPROC, (LONG)f_proc);
      }
     
    void __fastcall TForm1::ListBox1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y)
      {
      TPoint P = Point(X,Y);
      P = ListBox1->ClientToScreen(P);
      int item = ListBox1->ItemAtPos(Point(X,Y), true);
      if(item != -1) // Pas de ligne égal -1 si Existing est true dans la ItemAtPos
        {
        fen_hint->ActivateHint(TRect (P.x+16, P.y+16, P.x + 100, P.y+32), "Item" + IntToStr(item));
     
        TRACKMOUSEEVENT track = { sizeof(TRACKMOUSEEVENT), TME_LEAVE, ListBox1->Handle, 0 };
        TrackMouseEvent(&track);
        }
      else
        fen_hint->ReleaseHandle();
      }
    avec ceci
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    LRESULT APIENTRY f_proc(HWND hwnd, UINT umsg, WPARAM wparam, LPARAM lparam)
      {
      LRESULT retour = 0;
     
      // Désactive le Hint
      if (umsg == WM_MOUSELEAVE)
        Form1->fen_hint->ReleaseHandle();
      else
        retour = CallWindowProc(Form1->windowproc_orig, hwnd, umsg, wparam, lparam);
     
      return retour;
      }
    et ceci dans le .h
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    THintWindow* fen_hint;  
    FARPROC windowproc_orig; // WNDPROC
    Voilou

    A++

  7. #7
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par d�faut
    1000 MERCI totoche76, j'avais besoin du Hint ...

    @+

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Drag & Drop sur ListBox avec format
    Par Pouknouki dans le forum VB.NET
    R�ponses: 3
    Dernier message: 12/02/2012, 17h11
  2. R�ponses: 1
    Dernier message: 21/06/2011, 01h18
  3. Drag and Drop ListBox -> HTML
    Par babar93 dans le forum Silverlight
    R�ponses: 1
    Dernier message: 02/12/2009, 20h22
  4. Drag and Drop & listbox
    Par DarioP dans le forum Windows Forms
    R�ponses: 6
    Dernier message: 10/11/2009, 15h55
  5. drag & drop treeview=>listbox
    Par sam_c_java dans le forum Windows Forms
    R�ponses: 4
    Dernier message: 20/05/2009, 11h21

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