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 :

Problème avec des checkbox


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Février 2008
    Messages : 108
    Par défaut Problème avec des checkbox
    Bonjour,

    Je créé une application contenant plusieurs Tablesheets, comprenant elles-mêmes plusieurs checkboxes, se trouvant dans différents TGroupbox.

    Chaque checkbox porte un nom en fonction de l'onglet où elle se trouve. Par exemple, :
    Onglet Ecrire :
    Checkbox1 nom : P1EcrireC1
    Checkbox2 nom : P1EcrireC2
    Checkbox3 nom : P1EcrireC3
    ...

    Je voudrais savoir comment il est possible que lorsque je clique sur une chekbox, un compteur s'incrémente (et se décrémente si je reclique dessus) sans avoir à programmer la même routine pour chaque checkbox, et pour chaque Tgroupbox.

    J'ai réalisé une routine de ce genre, mais cela ne semble pas fonctionner :
    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 Tmatieres.EcrireContextPopup(Sender: TObject; MousePos: TPoint;
      var Handled: Boolean);
      var compteurecrire, i : integer;
    begin
    compteurecrire := strtoint(edit2.Text);
    for I := 0 to ControlCount - 1 do
    begin
        if Ecrire.controls[i].checked = true then
    begin
      compteurecrire := compteurecrire + 1;
      edit2.Text := inttostr(compteurecrire);
    end;
    end;
    end;
    Merci pour votre aide éventuelle.

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 086
    Par défaut
    Il suffit de mettre le même gestionnaire d'évèmenent OnClick pour toutes les CheckBox et utiliser le Sender pour savoir sur quelle CheckBox on a cliqué ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm1.CompteurCheckBoxClick(Sender: TObject);
    begin
      if Sender is TCheckBox then
        if TCheckBox(Sender).Checked then // le = true est implicite !
          Inc(compteurecrire)
        else
          Dec(compteurecrire);
    end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 400
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Il suffit de mettre le même gestionnaire d'évèmenent OnClick pour toutes les CheckBox et utiliser le Sender pour savoir sur quelle CheckBox on a cliqué ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm1.CompteurCheckBoxClick(Sender: TObject);
    begin
      if Sender is TCheckBox then
        if TCheckBox(Sender).Checked then // le = true est implicite !
          Inc(compteurecrire)
        else
          Dec(compteurecrire);
    end;
    c'est mieux que ma solution. bravo ShaiLeTroll

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Février 2008
    Messages : 108
    Par défaut
    Merci Shai le Troll. Toujours fidèle au poste à ce que je vois. Et tant mieux pour les débutants dans mon genre!....

    Une chose que je ne comprends pas (néophyte que je suis).

    Le nom de ta procédure :
    procedure Tmatieres.CompteurCheckBoxClick(Sender: TObject);

    CompteurCheckboxClick, fait référence à un objet?

    Merci d'éclairer ma lanterne.

  5. #5
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Par défaut
    Citation Envoyé par breizh44 Voir le message
    Merci Shai le Troll. Toujours fidèle au poste à ce que je vois. Et tant mieux pour les débutants dans mon genre!....

    Une chose que je ne comprends pas (néophyte que je suis).

    Le nom de ta procédure :
    procedure Tmatieres.CompteurCheckBoxClick(Sender: TObject);

    CompteurCheckboxClick, fait référence à un objet?

    Merci d'éclairer ma lanterne.
    Si je puis me permet Troll,
    ceci est un évenement que tu placera sur chaque check box dans l'évenement OnClick.

    A+

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Février 2008
    Messages : 108
    Par défaut
    donc, je mets dans l'événement OnClick de chaque checkbox CompteurCheckBoxClick.
    Mon code ressemble à ça désormais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    procedure Tmatieres.CompteurCheckBoxClick(Sender: TObject);
    var compteurecrire : integer;
    begin
    edit2.Text := inttostr(compteurecrire);
      if Sender is TCheckBox then
        if TCheckBox(Sender).Checked then
           Inc(compteurecrire)
                       else
        Dec(compteurecrire);
        end;
    Mais ma valeur de compteur ne s'incrémente, ni ne se décrémente. Où dois-je l'initialiser?

  7. #7
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Par défaut
    Citation Envoyé par breizh44 Voir le message
    donc, je mets dans l'événement OnClick de chaque checkbox CompteurCheckBoxClick.
    Mon code ressemble à ça désormais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    procedure Tmatieres.CompteurCheckBoxClick(Sender: TObject);
    var compteurecrire : integer;
    begin
    edit2.Text := inttostr(compteurecrire);
      if Sender is TCheckBox then
        if TCheckBox(Sender).Checked then
           Inc(compteurecrire)
                       else
        Dec(compteurecrire);
        end;
    Mais ma valeur de compteur ne s'incrémente, ni ne se décrémente. Où dois-je l'initialiser?
    Si tu a besoin de connaitre ton incrémentation ailleur que dans cette procédure retire le
    Var compteurecrire: integer;

    Et déclare la en variable global cela signifie donc que ta variable compteurecrire sera incrémenter ou décrémenter quelque soit le checkbox de ton Tabsheet utiliser.

  8. #8
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 400
    Par défaut
    salut;

    je crois qu'il faut faire ça au niveau de l'évènement onCheked (pourvu que je me souviens).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure btCheked(Sender : Object)
    begin
      if bt.Cheked then inc(i) else dec(i);
    end;
    autre chose ta variable (compteur) est locale donc écrasement à chaque appel de la procédure donc pas de résultat escompté.

Discussions similaires

  1. Réponses: 3
    Dernier message: 13/04/2015, 11h57
  2. [WD14] Problème d'accès natif avec des checkboxes
    Par Baboulinet_ dans le forum WinDev
    Réponses: 8
    Dernier message: 04/02/2013, 09h05
  3. [Tableaux] Problème de foreach avec des checkboxes
    Par nanor21 dans le forum Langage
    Réponses: 10
    Dernier message: 15/05/2006, 01h04
  4. Problème simple avec des checkbox
    Par nanor21 dans le forum Langage
    Réponses: 2
    Dernier message: 07/05/2006, 00h26
  5. Problèmes avec des vues
    Par dady dans le forum MFC
    Réponses: 22
    Dernier message: 09/01/2004, 16h26

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