Delfi Nadzor TListView prikaže seznam elementov v stolpcih z glavami in podpostavkami stolpcev ali navpično ali vodoravno z majhnimi ali velikimi ikonami.
Tako kot večina kontrolnikov Delphi tudi TListView izpostavi OnClick in OnDblClick (OnDoubleClick) dogodki.
Na žalost, če želite vedeti, na kateri element so kliknili ali dvakrat kliknili, ne morete preprosto obdelati dogodkov OnClick / OnDblClick, da bi dobili klikani izdelek.
Dogodek OnClick (OnDblClick) za TListView se sproži vsakič, ko uporabnik klikne kontrolnik - to je vedno, kadar pride do "klika" nekje znotraj odjemalskega področja nadzora.
Uporabnik lahko klikne pogled v seznamu, vendar "zgreši" kateri koli element. Poleg tega lahko pogled na seznam spremeni svoj prikaz, odvisno od lastnosti ViewStyle, uporabnika ste morda kliknili na element, na napis, na ikono predmeta "nikjer", na ikono stanja izdelka, itd.
Opomba: Lastnost ViewStyle določa, kako so elementi prikazani v pogledu seznama: predmeti so lahko prikazani kot niz premičnih ikon ali kot stolpci besedila.
Pogled seznama. Na elementu kliknite in izberite seznam. Na postavko Dvokliknite
Če želite ob iskanju dogodka OnClick za ogled seznama poiskati kliknjeno (če obstaja), morate ugotoviti, kaj elementi pogleda seznama ležijo pod točko, določeno s parametroma X in Y - to je lokacija miške v trenutku "klik".
TListiew's GetHitTestInfoAt funkcija vrne podatke o določeni točki v območju odjemalca pogleda seznama.
Če želite zagotoviti, da je bil izdelek kliknjen (ali dvakrat kliknjen), morate poklicati GetHitTestInfoAt in reagirati le, če se je dogodek klika zgodil na dejanskem predmetu.
Tu je primer izvajanja dogodka OnDblClick ListView1:
// ročaje ListView1's ob dvojnem klikupostopek TForm.ListView1DblClick(Pošiljatelj: TObject);
var
hts: THitTests;
ht: THitTest;
sht: vrvica;
ListViewCursosPos: TPoint;
izbranItem: TListItem;
začeti
// položaj miškega kazalca, povezan z ListView
ListViewCursosPos: = ListView1.ScreenToClient (Miška). CursorPos);
// dvoklik kje?
hts: = ListView1.GetHitTestInfoAt (ListViewCursosPos. X, ListViewCursosPos. Y);
// preizkus uspešnosti "odpravljanje napak"
Napis: = '';
za ht v hts stori
začeti
sht: = GetEnumName (TypeInfo (THitTest), Integer (ht));
Napis: = oblika ('% s% s |', [napis, sht]);
konec;
// poiščite element z dvojnim klikom
če hts <= [htOnIcon, htOnItem, htOnLabel, htOnStateIcon] torej
začeti
izbranItem: = ListView1.Selected;
// naredite nekaj z elementom z dvojnim klikom!
Napis: = Oblika ('DblClcked:% s', [izbranItem. Napis]);
konec;
konec;
V vodniku dogodkov OnDblClick (ali OnClick) preberite funkcijo GetHitTestInfoAt, tako da ji določite lokacijo miške "znotraj" krmilnika. Da bi dobili lokacijo miške glede na seznam seznama, se funkcija ScreenToClient uporablja za pretvorbo točke (miške X in Y) v koordinate zaslona v lokalne koordinate ali odjemalca.
GetHitTestInfoAt vrne vrednost TitTeste tip. The THitTests je skupek THitTest naštete vrednosti.
THITTest naštevanje Vrednosti z opisom so:
- htA zgoraj - nad območjem stranke.
- htBelow - pod območjem stranke.
- htNowhere - znotraj kontrolnika, vendar ne na izdelku.
- htOnItem - za element, njegovo besedilo ali njegovo bitno sliko.
- htOnButton - na gumbu.
- htOnIcon - na ikoni.
- htOnIndent - na območju z razdelkom predmeta.
- htOnLabel - na etiketi.
- htOnRight - na desni strani predmeta.
- htOnStateIcon - na ikoni stanja ali bitni sliki, povezani s elementom.
- htToLeft - na levi strani odjemalca.
- htToRight - na desni strani odjemalca.
Če je rezultat klica GetHitTestInfoAt a podvrsta (kompleti Delphi!) od [htOnIcon, htOnItem, htOnLabel, htOnStateIcon] lahko ste prepričani, da je uporabnik kliknil element (ali na ikono / ikono stanja).
Če je zgoraj navedeno res, preberite navodila Izbrano lastnost pogleda seznama, vrne prvo izbrano postavko (če je mogoče izbrati več) v pogledu seznama. Naredite nekaj s klikom / dvojno klikom / izbranim izdelkom ...
Bodite prepričani, da naložite celotno izvorno kodo, da jo preučite in se naučite tako, da jo sprejmete.