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

Delphi Discussion :

Clique droit des TListBox


Sujet :

Delphi

  1. #1
    Membre du Club Avatar de Bouguennec
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 58
    Points : 61
    Points
    61
    Par défaut Clique droit des TListBox
    Bonjour je voudrais que le clique droit de ma souris fasse la même action que le gauche c'est à dire sélectionne l'objet avant d'ouvrir le popmenu.
    Parce que jusque là je selectionne un objet et ensuite qu'importe où je clique sur la listbox ça ouvre le popmenu relatif à l'objet sélectionné qui n'est plus du tout sous la souris.

    Merci
    Je tourne en rond ... même dans les lignes droites !!!

  2. #2
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Yop !

    J'utilise avec bonheur OnMouseDown, mais dans une ListView : ça sera p'têt' pas pareil avec une ListBox. Enfin, à toi de voir...
    Mes 2 cts,
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  3. #3
    Membre du Club Avatar de Bouguennec
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 58
    Points : 61
    Points
    61
    Par défaut
    Je n'ai pas trouvé de solution avec OnMouseDown, si tu peux développer le fond de ta pensée ça m'aiderait je pense.
    Merci
    Je tourne en rond ... même dans les lignes droites !!!

  4. #4
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    Voilà ce que j'utilise pour afficher un menu contextuel dans une ListView qui contient des fichiers et dossiers. Je te le mets pour le mécanisme, mais attention à ne pas copier/coller car il va te falloir une tripotée de points .Pas pour faire tourner ça, plus pas mal d'heures de gamberge, une boîte d'aspirine et du café !
    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
    procedure TMainForm.lvFilesAnalyzeMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);       // Pour le clic-droit only
    var                // et pas MouseUp !
      ContextMenu: TShellContextMenu;
      RootPIDL,
      ID: PItemIDList;
    begin
      if not (Button = mbRight) then exit;
      ID := ShellItem(lvFilesAnalyze.Selected.Index).ID;
      RootPIDL := ConcatPIDLs(FPIDL, ID);
      ContextMenu := TShellContextMenu.Create(Self, Self.Handle);
      if ContextMenu.Init(GetDisplayName(FIDesktopFolder, RootPIDL, True)) then
        ContextMenu.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
      if Assigned(ContextMenu) then ContextMenu.Free;
    end;
    HTH,
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  5. #5
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 661
    Points : 3 630
    Points
    3 630
    Billets dans le blog
    2
    Par défaut
    Le composant TTreeView dispose d'une propriété dans l'inspecteur d'objet qui se nomme RightClickSelect qu'il faut positionner à True pour que le clic droit sélectionne l'item.

    N'y a t'il pas cette propriété pour les TListBox ? (Je n'ai pas Delphi sous la main pour vérifier..)
    Mon site - Mes tutoriels - GitHub - N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 36
    Points : 38
    Points
    38
    Par défaut
    Ceci fonctionne

    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
     
    procedure TForm1.ListBox1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    var
      Point : TPoint;
      ItemID : integer;
    begin
      if Button = mbRight then
      begin
        Point.X := X;
        Point.Y := Y;
        ItemID := ListBox1.ItemAtPos(Point, True);
        if ItemID <> -1 then
          ListBox1.Selected[ItemID] := True;
      end;
    end;
    Après, si tu est en MultiSelect, je pense qu'il faut adapter (pas testé)

    Birdyz

  7. #7
    Membre du Club Avatar de Bouguennec
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 58
    Points : 61
    Points
    61
    Par défaut
    Merci ça fonctionne mais j'ai dû remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListBox1.Selected[ItemID] := True;
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListBox1.ItemIndex:=ItemID
    pour mon application

    Encore Merci
    Je tourne en rond ... même dans les lignes droites !!!

  8. #8
    Membre du Club Avatar de Bouguennec
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 58
    Points : 61
    Points
    61
    Par défaut Fini
    Pour ceux que ça intéresse voici le code final qui permet d'ouvrir un popupmenu qui gère l'objet cliqué
    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
    procedure TForm1.ListBox2MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    var Point : TPoint;
    ItemID : integer;
    begin
    if Button = mbRight then begin
    Point.X := X;
    Point.Y := Y;
    ItemID := ListBox2.ItemAtPos(Point, True);
    if (ItemID<>-1) then begin
    ListBox2.ItemIndex:=ItemID;
    ListBox2Click(Sender);
    Envoyerversuneautrebasededonne1.Caption:='Envoyer '+suppr+' dans une autre base de donnée...';
    popupmenu2.Popup(Mouse.CursorPos.X,Mouse.CursorPos.Y);
    end;
    end;
    end;
    suppr étant une string en variable globale

    Avec dans ListBox2Click

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    i:=Listbox2.ItemIndex;
    suppr:=ListBox2.Items.Strings[i];
    Voilà
    Je tourne en rond ... même dans les lignes droites !!!

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/11/2011, 22h33
  2. clique droit dans la barre des taches
    Par khalfaoui.may dans le forum C++
    Réponses: 2
    Dernier message: 08/07/2011, 09h39
  3. Réponses: 3
    Dernier message: 12/11/2009, 16h15
  4. Réponses: 5
    Dernier message: 07/04/2007, 12h44
  5. Réponses: 5
    Dernier message: 22/07/2006, 16h08

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