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 :

TListview ClicDroit vers PopupMenu et pas d'item


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 135
    Par défaut TListview ClicDroit vers PopupMenu et pas d'item
    Bonjour,

    J'ai bcp de mal à trouver un exemple ou une direction à suivre pour, lorsque dans une TListview, on clic-droit pour lancer un PopupMenu, on doit réaliser un traitement particulier si aucun item n'est présent (comme si indexItem> count)!
    J'ai vu la méthode GetItemAt(X, Y) sauf que je ne sais pas récupérer X et Y, coordonnées de la souris à l'intérieur de ma TListView. Je ne peux pas utiliser les méthodes relatives aux évènements OnMouse puisqu'elles se lance après l'affichage de mon Popupmenu.

    Merci de votre aide!

  2. #2
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Citation Envoyé par James_ Voir le message
    J'ai vu la méthode GetItemAt(X, Y) sauf que je ne sais pas récupérer X et Y, coordonnées de la souris à l'intérieur de ma TListView. Je ne peux pas utiliser les méthodes relatives aux évènements OnMouse puisqu'elles se lance après l'affichage de mon Popupmenu.
    Bonjour,
    Cela ressemble a:
    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
     
    void __fastcall TForm2::ListView1MouseDown(TObject *Sender, TMouseButton Button,
    	  TShiftState Shift, int X, int Y)
    {
    int ligne;
    int colonne;
      LVHITTESTINFO lvhtti;
      lvhtti.pt = Point(X, Y);
      if ( SendMessage(ListView1->Handle, LVM_SUBITEMHITTEST, NULL, reinterpret_cast<LPARAM>(&lvhtti)) != -1   )
      {
    	 ligne = lvhtti.iItem;
    	 colonne = lvhtti.iSubItem - 1;
             //etc, bla bla, bla en c++, etc ;-)
      }
     
    }
    Bien valider la positon de la souris sur qqchose de 'valide' ou non.

    En espérant t'aider,
    @+

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 135
    Par défaut
    Merci mais ça ne fonctionne pas, j'ai pas cet événement lancé à l'intérieur de ma Listview, en dehors oui mais pas à l'intérieur!

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 135
    Par défaut
    Je ne trouve vraiment rien sur le net, ni exemples sur borland etc...
    J'utilise l'événement OnPopup d'un TMenuPopup et il est lié à la propriété PopupMenu d'une TListView.
    Lorsque je clique droit dans ma TListView, je veux réaliser un traitement A si le clic est effectué sur un item et un traitement B si le clic est effectué sur aucun item.
    J'ai essayé la propriété Selected mais builder me crée une erreur d'exception quand aucun item est selected.
    Je crois que la marche à suivre est de savoir si un item est présent à l'endroit où je clique.

    Merci de vos aides, remarques etc...

  5. #5
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Je ne comprend pas bien ce que tu veu, mais j'ai fait un teste.
    Sur la Form 1 ListView et 1 PopupMenu.
    Le parametrage des composants
    Le ListView

    Proprietes
    PopupMenu = PopupMenu1

    Events
    PopupMenu = PopupMenu1
    OnPopup = PopupMenu1Popup
    PopupMenu

    Events
    OnPopup = PopupMenu1Popup
    Le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Le code pour le teste:
    void __fastcall TForm1::PopupMenu1Popup(TObject *Sender)
    {
    // ici on place le code a executer
    ShowMessage("OK");
    }
    Si je fais un clic droit sur une valeur du ListView le Popup s'affiche puis la valeur est selectionnee
    Si je clic sur une plage vide le Popup s'affiche et rien n'est selectionne
    Je ne vois pas ce que tu cherche a faire ensuite

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 135
    Par défaut
    Ce que je vois de votre code c'est que dans tous les cas vous affichez un message OK qqsoit l'endroit dans la TListView où vous cliquez.
    Je reformule:
    J'aimerai, avant d'afficher mon PopupMenu (puisque j'utilise l'événement OnPopup), réaliser un traitement (A) si je clique sur un item dans ma TListView et un autre traitement (B) si je clique sur aucun item dans ma TListView.

  7. #7
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Bonjour,

    Je me permet de penser, en lisant cette dernière spécification, que tu devrais pouvoir y arriver avec (par exemple, mais pas uniquement) le bout de code que j'avais posté précédemment.
    En effet, il te permet de savoir dans quelle zone du TListView un évènement s'est produit, et d'en récupérer les coordonnées (et aussi possibilité de filtrer sur quel bouton de la souris a été utilisé).
    Ne renseigne pas la propriété 'PopupMenu' de l'objet TListView, afin que le TPopupMenu ne s'affiche pas a chaque click droit, essaies de faire un test avec ce code selon les conditions dont tu as besoin, et si 'OK' fais apparaitre le TPopupMenu avec qqchose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    PopupMenu->Popup(X,Y);
    Ou X et Y sont les coordonnées pour l'apparition du Popup.
    Si je ne délire pas trop, tu dois pouvoir te servir des coordonnées récupérées dans le code afin de spécifier une position correcte (peut être envisager une 'convertion', du type 'ClientToScreen' ou un truc comme cela)

    En espérant t'aider,
    @ +

  8. #8
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Si tu utilise l'evenement ItemIndex " false " si tu selectionne un Item " true " si tu clic ou il n'y a rien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void __fastcall TForm1::PopupMenu1Popup(TObject *Sender)
    {
    bool a = ListView1->ItemIndex;
    // on effectue le traitement en fonction de la valeur de a
    }

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 135
    Par défaut
    Je ne trouve pas la propriété "ItemIndex" dans une TListView.

  10. #10
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Dans l'aide de BCB tu tape TListView regarde dans les proprietes.
    Un bout de code qui verifie s'il y a une valeur ou non sur un clic droit
    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::PopupMenu1Popup(TObject *Sender)
    {
    if(ListView1->ItemIndex >= 0)
    {
    ShowMessage("Il y a une valeur");
    }
    else
    {
    ShowMessage("Il n'y a pas de valeur");
    }
    }

Discussions similaires

  1. Redirection vers HTML si pas de Plugin Flash
    Par guillaumeabxl dans le forum Flash
    Réponses: 8
    Dernier message: 08/07/2009, 17h09
  2. Réponses: 2
    Dernier message: 20/08/2007, 06h35
  3. TListView la souris au-dessus de Quel item ?
    Par OutOfRange dans le forum Delphi
    Réponses: 2
    Dernier message: 07/10/2006, 21h45
  4. FIREFOX chemin absolu vers images (fctionne pas??)
    Par valal dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 21/10/2005, 19h08
  5. Réponses: 6
    Dernier message: 19/09/2005, 12h55

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