Toteutetaan Kohta napsauta / Tuplaklikkaa TListView

click fraud protection

Delphin TListView-ohjaus näyttää luettelon kohteista sarakkeissa sarakeotsikoilla ja alayksiköillä tai pystysuoraan tai vaakasuoraan, pienillä tai suurilla kuvakkeilla.

Kuten useimmat Delphi-ohjaimet, TListView paljastaa Klikkaamalla ja OnDblClick (OnDoubleClick) -tapahtumat.

Valitettavasti, jos sinun on tiedettävä, mitä kohdetta napsautettiin tai kaksoisnapsautettiin, et voi yksinkertaisesti käsitellä OnClick / OnDblClick-tapahtumia saadaksesi napsautetun kohteen.

TListView: n OnClick (OnDblClick) -tapahtuma laukaistaan ​​aina, kun käyttäjä napsauttaa ohjainta - ts. Aina kun napsautus tapahtuu jossain ohjauksen asiakasalueen sisällä.

Käyttäjä voi napsauttaa luettelonäkymää, MUTTA "ohittaa" minkä tahansa kohteen. Lisäksi, koska luettelonäkymä voi muuttaa sen näyttöä käyttäjän ViewStyle-ominaisuuden mukaan on ehkä napsauttanut tuotetta, kohteen kuvatekstiä, esinekuvaketta, "ei mitään", kohteen tilakuvaketta, jne.

Huomaa: ViewStyle-ominaisuus määrittelee, miten kohteet näytetään luettelonäkymässä: kohteet voidaan näyttää siirrettävien kuvakkeiden joukona tai tekstisarakkeina.

instagram viewer

Listanäkymä. Kohteessa napsauta & luettelonäkymä. Kohteessa kaksoisnapsauta

Jotta löydettäisiin napsautettu (jos sellainen on) kohde, kun luettelonäkymän OnClick-tapahtuma potkaistaan, sinun on määritettävä mikä luettelonäkymän elementit ovat X- ja Y-parametrien määrittämän pisteen alapuolella - eli hiiren sijainti hetkellä "klikkaus".

TListiew's GetHitTestInfoAt -toiminto palauttaa määritellyn pisteen tiedot luettelonäkymän asiakasalueelle.

Varmistaksesi, että esinettä napsautettiin (tai kaksoisnapsautettiin), sinun on soitettava GetHitTestInfoAt-palveluun ja reagoitava vain, jos napsautustapahtuma tapahtui todellisessa tuotteessa.

Tässä on esimerkki ListView1: n OnDblClick-tapahtuman toteutuksesta:

// käsittelee ListView1: n kaksoisnapsautustamenettely TForm.ListView1DblClick(Lähettäjä: TObject);
var
hts: THitTests;
ht: THitTest;
SHT: jono;
ListViewCursosPos: TPoint;
selectedItem: TListItem;
alkaa
// Hiiren kohdistimen sijainti, joka liittyy ListView-kohtaan
ListViewCursosPos: = ListView1.ScreenToClient (hiiri. CursorPos);
// kaksoisnapsauta missä?
hts: = ListView1.GetHitTestInfoAt (ListViewCursosPos. X, ListViewCursosPos. Y);
// "debug" osumatesti
Kuvateksti: = '';
varten ht sisään HTS tehdä
alkaa
sht: = GetEnumName (TypeInfo (THitTest), kokonaisluku (ht));
Kuvateksti: = Muoto ('% s% s |', [Kuvateksti, sht]);
pää;
// etsi kaksoisnapsautettu kohde
jos hts <= [htOnIcon, htOnItem, htOnLabel, htOnStateIcon] sitten
alkaa
selectedItem: = ListView1.Valittu;
// tee jotain kaksoisnapsautetulla esineellä!
Kuvateksti: = Muoto ('DblClcked:% s', [selectedItem. Kuvateksti]);
pää;
pää;

Lue OnDblClick (tai OnClick) tapahtumankäsittelyohjelmassa GetHitTestInfoAt-toiminto antamalla sille hiiren sijainti ohjaimen sisällä. Saadaksesi hiiren sijainnin luettelonäkymään, ScreenToClient-toimintoa käytetään muuntamaan piste (hiiri X ja Y) näytön koordinaateissa paikallisiksi tai asiakasalueen koordinaateiksi.

GetHitTestInfoAt palauttaa arvon THitTests tyyppi. THitTests on joukko THitTest luetellut arvot.

THITTest luettelointi arvot ja niiden kuvaus ovat:

  • htAbove - asiakasalueen yläpuolella.
  • htBelow - asiakasalueen alapuolella.
  • htNowhere - hallintalaitteen sisällä, mutta ei esineessä.
  • htOnItem - kohteessa, sen tekstissä tai bittikartassa.
  • htOnButton - napilla.
  • htOnIcon - kuvakkeessa.
  • htOnIndent - esineen sisennetyllä alueella.
  • htOnLabel - etiketissä.
  • htOnRight - esineen oikealla puolella.
  • htOnStateIcon - kohtaan liittyvässä tilasymbolissa tai bittikartassa.
  • htToLeft - asiakasalueen vasemmalla puolella.
  • htToRight - asiakasalueen oikealla puolella.

Jos GetHitTestInfoAt-puhelun tulos on a alajoukko (Delphi-sarjat!) / [htOnIcon, htOnItem, htOnLabel, htOnStateIcon] -kohdassa voit olla varma, että käyttäjä napsautti kohdetta (tai sen kuvaketta / tilakuvaketta).

Lopuksi, jos yllä oleva totta, lue valittu ominaisuus, se palauttaa ensimmäisen valitun kohteen (jos useita voidaan valita) luettelonäkymässä. Tee jotain napsautetulla / kaksoisnapsautetulla / valitulla kohteella ...

Muista ladata koko lähdekoodi tutkiaksesi koodia ja oppiaksesi ottamalla se käyttöön.

instagram story viewer