TListView et CheckBox

John Dogget
Messages postés
384
Date d'inscription
vendredi 18 juin 2004
Statut
Membre
Dernière intervention
7 mai 2009
- 21 sept. 2007 à 09:55
Guillemouze
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
- 22 sept. 2007 à 22:12
Bonjour à tous.

Le compo TListView permet d'ajouter des cases à cocher dans la liste des éléments affichés (propriété Checkboxes).
Je cherche à capturer l'evenement consistant à cocher ou dé-cocher une case mais je ne trouve pas lequel c'est

Une idée ?

16 réponses

cs_Jean_Jean
Messages postés
615
Date d'inscription
dimanche 13 août 2006
Statut
Membre
Dernière intervention
13 décembre 2018
3
21 sept. 2007 à 17:32
Salut john

if listView1.Items[0].Checked = true then ce que tu veux faire

jean_Jean
0
Guillemouze
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
7
21 sept. 2007 à 19:51
il faut que tu utilise l'evenement onchange du tlistview, qui te retourne Change=ctState lorsque la checkbox est modifiée.
Attention, ce n'est pas le seul cas ou il te renvoie ctState, ca peut aussi etre la selection de l'item.
Je ne sais pas quelle utilisation tu fais du listview, mais tu peut peut etre utiliser un TCheckListBox
0
cs_Jean_Jean
Messages postés
615
Date d'inscription
dimanche 13 août 2006
Statut
Membre
Dernière intervention
13 décembre 2018
3
21 sept. 2007 à 20:19
Ben oui, même l'évènement Onclick doit convenir si mes souvenirs sont bons!
En fait le prob. c'est de repérer d'ou vient le clic. Donc, avec la réponse de Guillemouze, ça devrait fonctionner
A+
Jean_Jean
0
Guillemouze
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
7
21 sept. 2007 à 20:28
ce n'est pas tout a fait pareil.
Il me semble que sur une checkbox, l'evenement onclick est toujours appelé au changement, alors que su une tlistview, si tu selectionne un element , et que tu appuie sur espace, seul l'evenement OnChange est appelé.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Jean_Jean
Messages postés
615
Date d'inscription
dimanche 13 août 2006
Statut
Membre
Dernière intervention
13 décembre 2018
3
21 sept. 2007 à 20:56
Ah bien bien!
C'est vrai qu'il y a des subtilités au niveau des évènements des contrôles.
Parfois, le Onchange convient mieux pour discriminer les touches, parfois c'est le ONClick en fonction des codes de touches que l'on veut décoder.
Bien à toi.
0
John Dogget
Messages postés
384
Date d'inscription
vendredi 18 juin 2004
Statut
Membre
Dernière intervention
7 mai 2009

21 sept. 2007 à 22:44
Que de réponses

En fait, je voulais savoir s'il existe pas un évenement qui marche comme un "OnCheck" sur les CheckBoxe classiques.

Je vais creuser un peu plus sur le OnChange ...
0
japee
Messages postés
1727
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
6 novembre 2021
8
22 sept. 2007 à 00:07
Salut,

C'est un peu plus compliqué que ça...
Va voir ici, la réponse s'y trouve :
Implementing the On Item Checked Event for the TListView Control
Il y a une ou deux approximations dans le code, mais ça marche au poil.

Bonne prog'
0
Guillemouze
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
7
22 sept. 2007 à 00:26
@japee : je suis pas sur de ce que j'avance, mais il me semble qu'en combinant Item.checked et Change=ctState sur le OnChange revient au meme que ce qui est dit dans ton lien !
0
japee
Messages postés
1727
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
6 novembre 2021
8
22 sept. 2007 à 01:04
@ Guillemouze : oui, tu as raison, c'est beaucoup plus simple !
C'est toi le meilleur.
Merci pour le tuyau .

Bonne prog'
0
John Dogget
Messages postés
384
Date d'inscription
vendredi 18 juin 2004
Statut
Membre
Dernière intervention
7 mai 2009

22 sept. 2007 à 01:11
Moi perso, je comprends rien à ton code Japee ...
0
japee
Messages postés
1727
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
6 novembre 2021
8
22 sept. 2007 à 01:20
Je pense que de toute manière il vaut mieux utiliser la manière de Guillemouze, ça donne un truc comme ça :

procedure TForm1.ListView1Change(Sender: TObject; Item: TListItem;
  Change: TItemChange);
const
  BoolToStr: array[Boolean] of string = ('False', 'True');
begin
  if Change = ctState then
    with Item do
      Memo1.Lines.Add(Format('[index : %d] %s checked = %s',
                             [Index, Caption, BoolToStr[Item.Checked]]));
end;

A adapter bien sûr, mais on voit bien le fonctionnement.

Bonne prog'
0
cs_Jean_Jean
Messages postés
615
Date d'inscription
dimanche 13 août 2006
Statut
Membre
Dernière intervention
13 décembre 2018
3
22 sept. 2007 à 07:47
Bonjour Japee
Content de te "revoir". Je vois que tu es monté en grade toi-aussi.
J'aime bien ta solution. Il faut que je la mette dans un coin.
Jean_Jean
0
Guillemouze
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
7
22 sept. 2007 à 13:08
rendez a cesar ce qui appartient a cesar
0
japee
Messages postés
1727
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
6 novembre 2021
8
22 sept. 2007 à 15:01
Ave, Jean_Jean.

Petite précision : je n'ai que modestement "habillé" la proposition de Guillemouze.
Voilà cesar, c'est fait.
0
cs_Jean_Jean
Messages postés
615
Date d'inscription
dimanche 13 août 2006
Statut
Membre
Dernière intervention
13 décembre 2018
3
22 sept. 2007 à 17:02
OK, Japee, j'ai bien vu!
Excuse moi Guillemouze si tu pensais que je n'étais pas d'acord avec ta solution.
Depuis le début je suis d'accord, je ne l'ai pas dit assez clairement. C'est que je réfléchissai en même temps aux différents évènements. c'est pas toujours évident.
C'est simplement que l'habillage de jappe m'avait plu et d'ailleurs, c'est dans ces détails que j'apprends le plus car je peux tester le code directement en modifiant certains paramètres pour essayer.
Au fait, est-ce qu'on a répondu à la question de John?
Bien à vous!
Jean_Jean
0
Guillemouze
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
7
22 sept. 2007 à 22:12
hey mais c'est pas grave, je disais ca en rigolant ;)
l'important est d'apporter sa contribution pour faire avancer les choses. La reconnaissances des autres n'est pas forcement le plus important.
Je pense qu'avec tout ca, john aura une reponse qui lui convient.

Un petit ajout aux reponses : on peut certainement verifier que c'est bien la checkbox qui a ete changé en faisant quelquechose du genre

TForm1 = class(TForm)
...
private
    LastState: Boolean;
...
end;

Form1.ListView1Changing(...Item...)
begin
    LastState := Item.checked;
end;

Form1.ListView1Changed(...Item...)
begin
    if Item.checked <> LastState then
       showmessage('La check de '+ Item.Caption + ' a ete modifiee');
end;

Ce n'est pas testé, mais je suppose que ca doit marcher.
0