Üksuse klõpsamise / topeltklõpsu rakendamine TListView jaoks

Delphi omad TListView juhtnupp kuvab üksuste loendi veergudel päiste ja alamüksustega või vertikaalselt või horisontaalselt, väikeste või suurte ikoonidega.

Nagu enamik Delphi juhtelemente, paljastab TListView OnClick ja OnDblClick (OnDoubleClicki) sündmused.

Kahjuks ei pea te klõpsatud üksuse saamiseks lihtsalt käsitsema OnClicki / OnDblClicki sündmusi, kui peate teadma, millisele üksusele klõpsati või topeltklõpsiti.

TListView OnClicki (OnDblClicki) sündmus vallandatakse iga kord, kui kasutaja klõpsab juhtnupul - see on siis, kui "klõps" toimub kuskil juhtseadme kliendi piirkonnas.

Kasutaja saab klõpsata loendivaates, BET "igatseb" ükskõik millise üksuse. Veelgi enam, kuna loendivaade võib muuta oma kuva sõltuvalt ViewStyle atribuudist, kasutajast võib-olla klõpsasid üksusel, üksuse pealdisel, üksuse ikoonil, „kuhugi“, üksuse oleku ikoonil, jne.

Märkus. ViewStyle atribuut määrab, kuidas üksusi loendivaates kuvatakse: üksusi saab kuvada teisaldatavate ikoonide komplektina või tekstiveergudena.

instagram viewer

Loendivaade. Üksusel klõpsake nuppu & loendivaade. Üksusel topeltklõps

Loendivaate OnClicki sündmuse vallandamisel klõpsanud üksuse (kui seda on olemas) leidmiseks peaksite kindlaks määrama, mida loendivaate elemendid asuvad parameetrite X ja Y allpool - see tähendab hiire asukohta hetkel "klõps".

TListiew's GetHitTestInfoAt funktsioon tagastab teabe loendivaate kliendi piirkonnas täpsustatud punkti kohta.

Üksusele klõpsamise (või topeltklõpsamise) tagamiseks peate helistama GetHitTestInfoAt ja reageerima ainult siis, kui klõpsasündmus toimus tegelikul üksusel.

Siin on näide ListView1 sündmuse OnDblClicki rakendamisest:

// haldab ListView1 topeltklõpsuprotseduur TForm.ListView1DblClick(Saatja: TObject);
var
hts: THitTests;
ht: THitTest;
sht: nöör;
ListViewCursosPos: TPoint;
selectedItem: TListItem;
alustada
// hiirekursori asukoht seoses ListView'ga
ListViewCursosPos: = ListView1.ScreenToClient (hiir. CursorPos);
// topeltklõps kus?
hts: = ListView1.GetHitTestInfoAt (ListViewCursosPos. X, ListViewCursosPos. Y);
// "silumise" tabamuste test
Pealdis: = '';
jaoks ht sisse hts teha
alustada
sht: = GetEnumName (TypeInfo (THitTest), täisarv (ht));
Tiitrid: = vorming ('% s% s |', [pealdis, sht]);
lõpp;
// leidke topeltklõpsuga üksus
kui hts <= [htOnIcon, htOnItem, htOnLabel, htOnStateIcon] siis
alustada
selectedItem: = ListView1.Selected;
// tee midagi topeltklõpsuga üksusega!
Pealdis: = vorming ('DblClcked:% s', [valitudItem. Pealdis]);
lõpp;
lõpp;

OnDblClicki (või OnClicki) sündmuste töötlejas lugege funktsiooni GetHitTestInfoAt, määrates hiire asukoha juhtnuppu "sees". Hiire asukoha loendivaatega seotud asukoha saamiseks kasutatakse funktsiooni ScreenToClient ekraani koordinaatide punkti (hiir X ja Y) teisendamiseks kohalikeks või kliendi piirkonna koordinaatideks.

GetHitTestInfoAt tagastab väärtuse THITTests tüüp. THitTests on komplekt THitTest loendatud väärtused.

THITTEST loendamine väärtused koos nende kirjeldusega on:

  • htAbove - kliendipiirkonna kohal.
  • htBelow - kliendi ala all.
  • htNüüd - juhtseadme sees, kuid mitte esemel.
  • htOnItem - üksusel, selle tekstis või bitikaardil.
  • htOnButton - nupul.
  • htOnIcon - ikoonil.
  • htOnIndent - eseme taandeosas.
  • htOnLabel - etiketil.
  • htOnRight - eseme paremal küljel.
  • htOnStateIcon - üksusega seotud olekuikoonil või bitikaardil.
  • htToLeft - kliendipiirkonnast vasakul.
  • htToRight - kliendipiirkonnast paremal.

Kui GetHitTestInfoAt-le helistamise tulemus on a alamhulk (Delphi komplektid!) saidist [htOnIcon, htOnItem, htOnLabel, htOnStateIcon] võite olla kindel, et kasutaja klõpsas üksusel (või selle ikoonil / olekuikoonil).

Lõpuks, kui ülaltoodu vastab tõele, lugege Valitud loendivaate omaduse korral naaseb see loendivaates esimese valitud üksuse (kui saab valida mitu). Tehke midagi klõpsatud / topeltklõpsitud / valitud üksusega ...

Laadige kindlasti alla kogu lähtekood, et uurida seda koodi ja õppida seda vastu võtma.