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 6
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 6
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 6
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 6
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 6
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
Rejoignez-nous