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 :

TCheckListBox, cocher la case aussi quand clic sur la caption


Sujet :

C++Builder

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 229
    Points : 79
    Points
    79
    Par défaut TCheckListBox, cocher la case aussi quand clic sur la caption
    Bonjour,

    j'ai un TCheckListBox.
    Est il possible de faire en sorte que la case soit cochée/décochée systématiquement lorsque l'on clique sur le texte de la checkBox et non pas uniquement si on clique dans le carré de la checkBox?

    merci !!

    Pascale38

  2. #2
    Membre éclairé Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Points : 717
    Points
    717
    Par défaut
    Bonjour,

    En faisant un toogle sur l'event onClick ?
    For crying out loud !

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 229
    Points : 79
    Points
    79
    Par défaut
    Je veux bien mais je ne sais pas ce qu'est un toogle ?

  4. #4
    Membre éclairé Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Points : 717
    Points
    717
    Par défaut
    La méthode pour switcher la valeur de la ta checkbox par code.
    C'est peut-être pas toogle, mais checked ou setchecked(bool)...
    For crying out loud !

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 229
    Points : 79
    Points
    79
    Par défaut
    Oui justement j'aimerai savoir comment je peux récupérer lequel item est cliqué (ou selectionné) afin de "checker" la case correspondante.
    mais je ne vois pas comment faire ça, j'ai bien l’événement onClick, mais après comment retrouver l'item clické ?
    Je sèche... merci !

  6. #6
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    Par défaut
    Citation Envoyé par Pascale38 Voir le message
    Bonjour,

    j'ai un TCheckListBox.
    Est il possible de faire en sorte que la case soit cochée/décochée systématiquement lorsque l'on clique sur le texte de la checkBox et non pas uniquement si on clique dans le carré de la checkBox?

    merci !!

    Pascale38
    Salut, je ne comprends pas ta question. Par défaut un checkbox Windows toggle la sélection quand on clique sur le Caption du TCheckBox. Est-ce que tu parles d'un projet VCL?

    Edit 1: je viens de voir que tu parles d'un TCheckListBox et non d'un TCheckBox.

    Edit 2: dans l'évènement OnMouseDown du TCheckListBox il faut ajouter le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        TCheckListBox* LCheckListBox = static_cast<TCheckListBox*>(Sender);
        TPoint LPoint = Point(X, Y);
        int LPos = LCheckListBox->ItemAtPos(LPoint, true);
        if(LPos >= 0)
        {
            LCheckListBox->Checked[LPos] = !LCheckListBox->Checked[LPos];
        }
    • Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
    • Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
    • Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 229
    Points : 79
    Points
    79
    Par défaut
    Merci Crayon,

    et oui bizarrement le TCheckListBox ne fonctionne pas comme un TCheckBox, ce qui est ennuyeux car pas toujours évident pour l'utilisateur de cliquer
    exactement dans la case, surtout quan dil n'a pas de souris (ce qui est majoritairement le cas des utilisateurs de notre appli).

    Super ton code, ça marche pas mal du tout
    Problème maintenant c'est que si on clique sur la case ça n'a pas d'effet, car en fait le code du mouse down annule le check
    Je regarde comment inhiber le check du coup !?

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 573
    Points : 713
    Points
    713
    Par défaut
    Bonjour
    Pourquoi ne pas utiliser une simple listbox avec selection multiple et pression de la touche control des qu on entre sur le composant et relachement à la sortie ?

    ListBox1->MultiSelect = true ;

    //---------------------------------------------------------------------------
    void __fastcall TForm1::ListBox1Enter(TObject *Sender)
    {
    keybd_event(VK_CONTROL, 0, 0, 0) ;
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::ListBox1Exit(TObject *Sender)
    {
    keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
    }
    //---------------------------------------------------------------------------

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 229
    Points : 79
    Points
    79
    Par défaut
    cedni merci pour ta proposition, mais il me faut des cases à cocher...

  10. #10
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    Par défaut
    Citation Envoyé par Pascale38 Voir le message
    cedni merci pour ta proposition, mais il me faut des cases à cocher...
    Sinon, il y a le TListView avec la propriété Checkboxes à true
    • Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
    • Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
    • Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon

  11. #11
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    Par défaut
    Citation Envoyé par Pascale38 Voir le message
    Super ton code, ça marche pas mal du tout
    Problème maintenant c'est que si on clique sur la case ça n'a pas d'effet, car en fait le code du mouse down annule le check
    Je regarde comment inhiber le check du coup !?
    Pour régler ce problème tu peux créer une classe dans ton fichier .h qui sert à exposer la méthode GetCheckWidth qui est protected.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class TMyCheckListBox : public TCheckListBox
    {
        typedef TCheckListBox inherited;
    public:
        int __fastcall CheckBoxWidth()
        {
            return inherited::GetCheckWidth();
        }
    };
    Ensuite tu utilises ce code dans l'évènement OnMouseDown du TCheckListBox:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        TMyCheckListBox* LCheckListBox = static_cast<TMyCheckListBox*>(Sender);
        if(X > LCheckListBox->CheckBoxWidth())
        {
            TPoint LPoint = Point(X, Y);
            int LPos = LCheckListBox->ItemAtPos(LPoint, true);
            if(LPos >= 0)
            {
                LCheckListBox->Checked[LPos] = !LCheckListBox->Checked[LPos];
            }
        }
    Il existe une réponse plus complexe ici si celle-ci en te conviens pas: https://stackoverflow.com/questions/...e-on-that-item
    • Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
    • Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
    • Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 229
    Points : 79
    Points
    79
    Par défaut
    Merci Crayon !!
    Pour le TListView, ben le comportement est le même en fait, ça se coche pas quand le texte est sélectionné...
    je vais voir ton autre solution.

    merci !!

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    229
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 229
    Points : 79
    Points
    79
    Par défaut
    Super ça marche bien, merci !!
    En plus j'ai le choix entre plusieurs solutions, c'est Noël avant l'heure !!

    merci

Discussions similaires

  1. [Wamp] Pas de menus quand clic sur Wamp
    Par shivafrodite dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 7
    Dernier message: 11/10/2011, 10h21
  2. Réponses: 8
    Dernier message: 27/12/2010, 22h01
  3. [1.x] Vérifier clic sur une case à cocher
    Par blasil64 dans le forum Symfony
    Réponses: 4
    Dernier message: 22/02/2010, 13h44
  4. Réponses: 7
    Dernier message: 18/04/2007, 18h31
  5. Réponses: 8
    Dernier message: 09/12/2005, 15h08

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