Delphi Le contrôle TListView affiche une liste d'éléments dans des colonnes avec des en-têtes et sous-éléments de colonne, ou verticalement ou horizontalement, avec de petites ou grandes icônes.
Comme la plupart des contrôles Delphi, le TListView expose le Sur clic et OnDblClick (OnDoubleClick) événements.
Malheureusement, si vous avez besoin de savoir quel élément a été cliqué ou double-cliqué, vous ne pouvez pas simplement gérer les événements OnClick / OnDblClick pour obtenir l'élément cliqué.
L'événement OnClick (OnDblClick) pour TListView est déclenché chaque fois que l'utilisateur clique sur le contrôle - c'est-à-dire chaque fois que le «clic» se produit quelque part à l'intérieur de la zone cliente du contrôle.
L'utilisateur peut cliquer à l'intérieur de la vue de liste, MAIS "manquer" l'un des éléments. De plus, puisque la vue de liste peut changer son affichage en fonction de la propriété ViewStyle, l'utilisateur peut avoir cliqué sur un élément, sur une légende d'élément, sur une icône d'élément, "nulle part", sur une icône d'état d'élément, etc.
Remarque: la propriété ViewStyle détermine la façon dont les éléments sont affichés dans la vue de liste: les éléments peuvent être affichés sous la forme d'un ensemble d'icônes mobiles ou sous forme de colonnes de texte.
ListView. Sur l'élément, cliquez sur & ListView. Sur l'article Double-cliquez
Pour pouvoir localiser l'élément cliqué (s'il y en a un) lorsque l'événement OnClick pour la vue de liste est déclenché, vous devez déterminer ce les éléments de la vue de liste se trouvent sous le point spécifié par les paramètres X et Y - c'est-à-dire l'emplacement de la souris au moment de "Cliquez sur".
Les TListiew's GetHitTestInfoAt renvoie des informations sur le point spécifié dans la zone client de la vue liste.
Pour vous assurer que l'élément a été cliqué (ou double-cliqué), vous devez appeler GetHitTestInfoAt et réagir uniquement si l'événement de clic s'est produit sur un élément réel.
Voici un exemple d'implémentation de l'événement OnDblClick de ListView1:
// gère ListView1's On Double Clickprocédure TForm.ListView1DblClick(Expéditeur: TObject);
var
hts: THitTests;
ht: THitTest;
sht: chaîne;
ListViewCursosPos: TPoint;
selectedItem: TListItem;
commencer
// position du curseur de la souris par rapport à ListView
ListViewCursosPos: = ListView1.ScreenToClient (souris. CursorPos);
// double-cliquez où?
hts: = ListView1.GetHitTestInfoAt (ListViewCursosPos. X, ListViewCursosPos. Y);
// test de réussite "debug"
Légende: = '';
pour ht dans hts faire
commencer
sht: = GetEnumName (TypeInfo (THitTest), Integer (ht));
Légende: = Format ('% s% s |', [Légende, sht]);
fin;
// localiser l'élément double-cliqué
si hts <= [htOnIcon, htOnItem, htOnLabel, htOnStateIcon] ensuite
commencer
selectedItem: = ListView1.Selected;
// faites quelque chose avec l'élément double-cliqué!
Légende: = Format ('DblClcked:% s', [selectedItem. Légende]);
fin;
fin;
Dans le gestionnaire d'événements OnDblClick (ou OnClick), lisez la fonction GetHitTestInfoAt en lui fournissant l'emplacement de la souris "à l'intérieur" du contrôle. Pour obtenir l'emplacement de la souris par rapport à la vue de liste, la fonction ScreenToClient est utilisée pour convertir un point (souris X et Y) en coordonnées d'écran en coordonnées locales ou clientes.
GetHitTestInfoAt renvoie une valeur de THitTests type. Les THitTests sont un ensemble de THitTest valeurs énumérées.
Le THitTest énumération les valeurs, avec leur description, sont:
- htAbove - au-dessus de l'espace client.
- htBelow - en dessous de l'espace client.
- htNowhere - à l'intérieur du contrôle, mais pas sur un élément.
- htOnItem - sur un élément, son texte ou son bitmap.
- htOnButton - sur un bouton.
- htOnIcon - sur une icône.
- htOnIndent - sur la zone en retrait d'un élément.
- htOnLabel - sur une étiquette.
- htOnRight - sur le côté droit d'un article.
- htOnStateIcon - sur une icône d'état ou un bitmap associé à un élément.
- htToLeft - à gauche de l'espace client.
- htToRight - à droite de l'espace client.
Si le résultat de l'appel à GetHitTestInfoAt est un sous-ensemble (ensembles Delphi!) de [htOnIcon, htOnItem, htOnLabel, htOnStateIcon], vous pouvez être sûr que l'utilisateur a cliqué sur l'élément (ou sur son icône / icône d'état).
Enfin, si ce qui précède est vrai, lisez le Choisi propriété de la vue liste, elle renvoie le premier élément sélectionné (si plusieurs peuvent être sélectionnés) dans la vue liste. Faites quelque chose avec l'élément cliqué / double-cliqué / sélectionné ...
Assurez-vous de télécharger le code source complet pour explorer le code et apprendre en l'adoptant.