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.
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.