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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Bouguennec
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 58
    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

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 115
    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

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 58
    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

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 115
    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

  5. #5
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    674
    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 : 674
    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
    Membre confirmé
    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
    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 confirmé Avatar de Bouguennec
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 58
    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

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

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 58
    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à

+ 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