Implementacija na klik stavke / dvostruki klik za TListView

Delphi-a TListView kontrola prikazuje popis stavki u stupcima s zaglavljama i pod-stavkama ili okomito ili vodoravno, s malim ili velikim ikonama.

Kao i većina Delphi kontrola, TListView izlaže Na klik i OnDblClick (OnDoubleClick) događaji.

Nažalost, ako želite znati na koji je proizvod kliknut ili dvostruko kliknut, ne možete jednostavno obraditi događaje OnClick / OnDblClick da biste dobili stavku koju kliknete.

Događaj OnClick (OnDblClick) za TListView pokreće se kad korisnik klikne kontrolu - to je svaki put kad se klik klikne negdje unutar klijentskog područja kontrole.

Korisnik može kliknuti unutar popisa, ali "propustiti" bilo koju stavku. Štoviše, budući da prikaz popisa može promijeniti zaslon ovisno o svojstvu ViewStyle, korisniku možda ste kliknuli na stavku, na stavku predmeta, na ikonu stavke, "nigdje", na ikonu stanja predmeta, itd

Napomena: svojstvo ViewStyle određuje kako će se stavke prikazati u prikazu popisa: stavke se mogu prikazati kao skup pomičnih ikona ili kao stupac teksta.

instagram viewer

ListView. Na stavci Klikni i pogledaj popis. Na stavku Dvokliknite

Da biste mogli pronaći klikanu stavku (ako postoji), kada se pokrene događaj OnClick za prikaz popisa, morate odrediti što elementi prikaza popisa nalaze se pod točkom navedenom u parametrima X i Y - to je položaj miša u trenutku "klik".

TListiewovi GetHitTestInfoAt funkcija vraća podatke o specificiranoj točki u klijentskom području prikaza popisa.

Da biste bili sigurni da je stavka kliknuta (ili dvostruko kliknuta), morate nazvati GetHitTestInfoAt i reagirati samo ako se događaj klika dogodio na stvarnoj stavci.

Evo primjera implementacije OnDblClick događaja ListView1:

// rukuje ListView1-om na dvostrukom klikupostupak TForm.ListView1DblClick(Pošiljatelj: TObject);
var
hts: THitTests;
ht: THitTest;
ShT: niz;
ListViewCursosPos: TPoint;
selectedItem: TListItem;
početi
// položaj pokazivača miša povezan sa ListView
ListViewCursosPos: = ListView1.ScreenToClient (Miš). CursorPos);
// dvostruki klik gdje?
hts: = ListView1.GetHitTestInfoAt (ListViewCursosPos. X, ListViewCursosPos. Y);
// test za uklanjanje pogrešaka
Opis: = '';
za ht u HTS čini
početi
sht: = GetEnumName (TypeInfo (THitTest), Integer (ht));
Opis: = Oblik ('% s% s |', [naslov, sht]);
kraj;
// pronađite stavku s dva klika
ako hts <= [htOnIcon, htOnItem, htOnLabel, htOnStateIcon] zatim
početi
selectedItem: = ListView1.Selected;
// učiniti nešto s dvostruko klikom stavke!
Natpis: = Format ('DblClcked:% s', [selectedItem. Opis]);
kraj;
kraj;

U alatu za događanja OnDblClick (ili OnClick) pročitajte funkciju GetHitTestInfoAt pružajući mu mjesto miša "unutar" kontrole. Da biste dobili mjesto miša povezano s prikazom popisa, funkcija ScreenToClient koristi se za pretvaranje točke (miša X i Y) u koordinate zaslona u lokalne koordinate ili područje klijenta.

GetHitTestInfoAt vraća vrijednost od THitTests tip. THitTests je skup THitTest nabrojane vrijednosti.

THITTest nabrajanje Vrijednosti sa njihovim opisom su:

  • htAbove - iznad područja klijenta.
  • htBelow - ispod područja klijenta.
  • htNowhere - unutar kontrole, ali ne na predmetu.
  • htOnItem - na stavku, njen tekst ili njezinu bitnu mapu.
  • htOnButton - na gumbu.
  • htOnIcon - na ikoni.
  • htOnIndent - na razvedenom području predmeta.
  • htOnLabel - na etiketi.
  • htOnRight - na desnoj strani predmeta.
  • htOnStateIcon - na ikoni stanja ili bitmapu povezanom s stavkom.
  • htToLeft - lijevo od područja klijenta.
  • htToRight - s desne strane područja klijenta.

Ako je rezultat poziva GetHitTestInfoAt a podskupina (Delphi setovi!) od [htOnIcon, htOnItem, htOnLabel, htOnStateIcon] možete biti sigurni da je korisnik kliknuo stavku (ili na ikonu / ikonu stanja).

Konačno, ako je gore navedeno istina, pročitajte tekst Odabran svojstvo prikaza popisa, vraća prvu odabranu stavku (ako se može odabrati više) u prikazu popisa. Učinite nešto s kliknutim / dvostrukim klikom / odabranom stavkom ...

Svakako preuzmite cijeli izvorni kod kako biste ga istražili i naučili usvajanjem.

instagram story viewer