Het TListView-besturingselement van Delphi geeft een lijst met items weer in kolommen met kolomkoppen en subitems, of verticaal of horizontaal, met kleine of grote pictogrammen.
Net als de meeste Delphi-bedieningselementen geeft de TListView de Bij klikken en OnDblClick (OnDoubleClick) -gebeurtenissen.
Helaas, als u wilt weten op welk item is geklikt of dubbelklikt, kunt u de OnClick / OnDblClick-evenementen niet eenvoudig afhandelen om het aangeklikte item te krijgen.
De OnClick-gebeurtenis (OnDblClick) voor de TListView wordt geactiveerd wanneer de gebruiker op het besturingselement klikt, dat wil zeggen wanneer de "klik" plaatsvindt ergens in het clientgebied van de besturing.
De gebruiker kan in de lijstweergave klikken, MAAR elk item "missen". Bovendien, omdat de lijstweergave de weergave kan veranderen afhankelijk van de ViewStyle-eigenschap, heeft de gebruiker mogelijk op een item, op een itemtitel, op een itempictogram, "nergens", op een itemstatuspictogram, enz. Geklikt.
Opmerking: de ViewStyle-eigenschap bepaalt hoe items in de lijstweergave worden weergegeven: de items kunnen worden weergegeven als een set verplaatsbare pictogrammen of als tekstkolommen.
Om het aangeklikte item (indien aanwezig) te kunnen vinden wanneer de OnClick-gebeurtenis voor de lijstweergave wordt geactiveerd, moet u bepalen welke elementen van de lijstweergave onder het punt liggen dat is opgegeven door de X- en Y-parameters - dat is de locatie van de muis op het moment van "klik".
De TListiew's GetHitTestInfoAt functie retourneert informatie over het opgegeven punt in het clientgebied van de lijstweergave.
Om er zeker van te zijn dat op het item is geklikt (of dubbel geklikt), moet u GetHitTestInfoAt aanroepen en alleen reageren als de click-gebeurtenis op een daadwerkelijk item plaatsvond.
Hier is een voorbeeldimplementatie van de OnDblClick-gebeurtenis van ListView1:
// verwerkt ListView1's bij dubbelklikprocedure TForm.ListView1DblClick(Afzender: TObject);
var
hts: THitTests;
ht: THitTest;
sht: draad;
ListViewCursosPos: TPoint;
selectedItem: TListItem;
beginnen
// positie van de muiscursor gerelateerd aan ListView
ListViewCursosPos: = ListView1.ScreenToClient (Mouse.CursorPos);
// dubbelklik waar?
hts: = ListView1.GetHitTestInfoAt (ListViewCursosPos.X, ListViewCursosPos.Y);
// "debug" hit-test
Bijschrift: = ";
voor ht in hts Doen
beginnen
sht: = GetEnumName (TypeInfo (THitTest), Geheel getal (ht));
Bijschrift: = Formaat ('% s% s |', [Caption, sht]);
einde;
// zoek het dubbelklik-item
als hts <= [htOnIcon, htOnItem, htOnLabel, htOnStateIcon] vervolgens
beginnen
selectedItem: = ListView1.Selected;
// doe iets met het dubbelklik-item!
Bijschrift: = Formaat ('DblClcked:% s', [selectedItem.Caption]);
einde;
einde;
Lees in de gebeurtenishandler OnDblClick (of OnClick) de functie GetHitTestInfoAt door deze de locatie van de muis "in" het besturingselement te geven. Om de locatie van de muis met betrekking tot de lijstweergave te verkrijgen, wordt de functie ScreenToClient gebruikt om een punt (muis X en Y) in schermcoördinaten om te zetten in lokale coördinaten of clientgebieden.
De GetHitTestInfoAt retourneert een waarde van THitTests type. De THitTests is een set van THitTest opgesomde waarden.
De THitTest-opsommingswaarden, met hun beschrijving, zijn:
Als het resultaat van de aanroep van GetHitTestInfoAt een subset (Delphi-sets!) Is van [htOnIcon, htOnItem, htOnLabel, htOnStateIcon], weet u zeker dat de gebruiker op het item (of op het pictogram / statuspictogram) heeft geklikt.